我也配置了很多次了,前面都快放弃了,最近在学习resuful框架写api,代码实现上没涌现啥问题,倒是这个path_info的环境配置把我弄的比较忧郁
你一定见过类似这样的路径:http://www.04007.cn/index.php/home/index/action/3408.html,对,这便是phpinfo模式。从上面可以看出其有以下几个特点。
1,URL中带有入口文件全名,即index.php,
2,在入口文件后面依然跟有路径比如上面的/home/index/action/3408.html
3,很多框架中后面分别是/模块/掌握器/方法参数等,Thinkphp便是这样的。当然这个不一定非得是模块掌握器方法的组成。
按照常理来理解,index.php后面跟随着路径,那么index.php就相称于一个文件夹了。但实际上又不存在index.php这个文件夹,以是如果没有开启phpinfo模式,那么这个路径解析就会报找不到文件。而只有在开启phpinfo模式之后,做事器才会去实行index.php这个文件。从做事器上的配置方法也可以看出来。
本人利用的是集成安装环境phpstudy,这个环境用的韶光比较久
先检讨这三个配置
一:
在PHP安装文件夹下找到PHP.INI,
将
;cgi.fix_pathinfo=1
改为
cgi.fix_pathinfo = On
保存,重启做事器即可
也有的说将
;cgi.fix_pathinfo=1
之前的 ; 去掉,即改为
cgi.fix_pathinfo=1
保存,重启做事器的。
但是我考试测验创造,这样并不能办理问题,于是决定采取第二种方法;
二:
打开Apache安装文件夹下的conf文件夹,找到httpd.conf文件中找到下面这段代码
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
AcceptPathInfo On //加入这行代码就OK了
</Directory>
不幸的是,按照上面的方法,还是失落败了。木办法,只能试下第三种方法了;
三:
在配置文件中加入
<Files .php>
AcceptPathInfo On
</Files>
这样 Apache 就可以支持针对 php 文件的 PathInfo 了。
于是,又充满希望的试了一下,可惜,还是没有成功。
我想,这PathInfo跟URL有关,那会不会是由于Apache做事器没有开启mod_rewrite模块的关系呢?于是,我在Apache的配置文件(Apache安装目录的conf文件夹下的httpd.conf文件)里找到:
#LoadModule rewrite_module modules/mod_rewrite.so
将前面的#去掉,改为:
LoadModule rewrite_module modules/mod_rewrite.so
下面是nginx做事器开启phpinfo模式的方法:
location ~ [^/]\.php(/|$){ # comment try_files $uri =404; to enable pathinfo #try_files $uri =404; #把这行代码注释,让做事器意外验测验去加载路径文件 fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; include pathinfo.conf; #加载phpinfo.conf配置}
重启nginx做事器即可。对付Apache做事器,须要先加载rewrite模块,将http.conf中的配置AllowOverride None将None改为 All,重启Apache即可。在.htaccess文件中加入
RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.)$ index.php/$1 [QSA,PT,L]
注:在配置虚拟域名的时候我的配置
我给个我的配置成功的php.ini和httpd.comf把,我在其余一台电脑没有成功的缘故原由可能是我多加了个这个指向到项目地址的配置,例如我下面这个配置把
DocumentRoot \"大众E:\phpstudy\WWW\restful\公众
<Directory />
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
AcceptPathInfo On
Require all granted
</Directory>
指向到了项目单项目的根地址下把
我的配置的下载地址:
http://download.csdn.net/download/qq_27229113/9981419
最近在学习用restful框架写api,创造自己路由存在这个问题
我把虚拟域名指向为www.restfulapi.com/
虚拟域名地址指向为restfulapi这个文件夹
我的api目录写在restful/index.php里面,有两个方法,分别是users和articles两个方法
如果我输入http://www.restfulapi.com/restful/路由会创造还报这个缺点Notice: Undefined index: PATH_INFO in E:\phpstudy\WWW\restfulapi\restful\index.php on line 107
但是输入这个路由时http://www.restfulapi.com/restful/users
便有数据反馈{\"大众error\"大众:\公众用户名不能为空\"大众}
在代码index.php打印加载的配置
var_dump($_SERVER);反馈结果为
array(39) { [\"大众REDIRECT_STATUS\公众]=> string(3) \公众200\公众 [\"大众HTTP_HOST\"大众]=> string(18) \"大众www.restfulapi.com\"大众 [\"大众HTTP_CONNECTION\"大众]=> string(10) \公众keep-alive\"大众 [\"大众HTTP_CACHE_CONTROL\"大众]=> string(9) \"大众max-age=0\公众 [\"大众HTTP_USER_AGENT\"大众]=> string(108) \"大众Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36\公众 [\"大众HTTP_UPGRADE_INSECURE_REQUESTS\"大众]=> string(1) \"大众1\公众 [\公众HTTP_ACCEPT\"大众]=> string(85) \公众text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8\"大众 [\"大众HTTP_ACCEPT_ENCODING\公众]=> string(13) \"大众gzip, deflate\公众 [\"大众HTTP_ACCEPT_LANGUAGE\"大众]=> string(14) \"大众zh-CN,zh;q=0.8\"大众 [\"大众PATH\"大众]=> string(272) \"大众C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\adb\"大众 [\"大众SystemRoot\"大众]=> string(10) \"大众C:\Windows\公众 [\"大众COMSPEC\"大众]=> string(27) \公众C:\Windows\system32\cmd.exe\公众 [\"大众PATHEXT\"大众]=> string(53) \"大众.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC\"大众 [\公众WINDIR\公众]=> string(10) \公众C:\Windows\"大众 [\公众SERVER_SIGNATURE\公众]=> string(0) \"大众\公众 [\"大众SERVER_SOFTWARE\"大众]=> string(47) \"大众Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.5.38\公众 [\"大众SERVER_NAME\"大众]=> string(18) \"大众www.restfulapi.com\"大众 [\"大众SERVER_ADDR\公众]=> string(9) \"大众127.0.0.1\公众 [\"大众SERVER_PORT\"大众]=> string(2) \公众80\"大众 [\"大众REMOTE_ADDR\"大众]=> string(9) \"大众127.0.0.1\公众 [\"大众DOCUMENT_ROOT\公众]=> string(26) \"大众E:/phpstudy/WWW/restfulapi\公众 [\"大众REQUEST_SCHEME\"大众]=> string(4) \"大众http\公众 [\"大众CONTEXT_PREFIX\"大众]=> string(0) \"大众\"大众 [\公众CONTEXT_DOCUMENT_ROOT\"大众]=> string(26) \公众E:/phpstudy/WWW/restfulapi\"大众 [\公众SERVER_ADMIN\"大众]=> string(18) \"大众admin@phpStudy.net\"大众 [\公众SCRIPT_FILENAME\"大众]=> string(44) \公众E:/phpstudy/WWW/restfulapi/restful/index.php\"大众 [\"大众REMOTE_PORT\"大众]=> string(5) \公众59338\"大众 [\"大众REDIRECT_URL\"大众]=> string(14) \"大众/restful/users\公众 [\公众GATEWAY_INTERFACE\公众]=> string(7) \"大众CGI/1.1\"大众 [\"大众SERVER_PROTOCOL\"大众]=> string(8) \"大众HTTP/1.1\公众 [\公众REQUEST_METHOD\"大众]=> string(3) \公众GET\"大众 [\"大众QUERY_STRING\"大众]=> string(0) \"大众\公众 [\"大众REQUEST_URI\"大众]=> string(14) \"大众/restful/users\"大众 [\"大众SCRIPT_NAME\公众]=> string(18) \公众/restful/index.php\"大众[\"大众PATH_INFO\公众]=>string(6) \公众/users\"大众 [\"大众PATH_TRANSLATED\"大众]=> string(32) \公众E:\phpstudy\WWW\restfulapi\users\公众 [\公众PHP_SELF\"大众]=> string(24) \"大众/restful/index.php/users\公众 [\公众REQUEST_TIME_FLOAT\"大众]=> float(1505533005.973) [\公众REQUEST_TIME\"大众]=> int(1505533005) } {\"大众error\"大众:\公众用户名不能为空\公众}
创造[\"大众PATH_INFO\"大众]=>string(6) \公众/users\"大众
解释这个path_info配置只指向到了restful/users和restful/articles目录下我疑惑是我的路由配置的缘故原由在打开我的 .htaccess文件夹
RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.)$ index.php/$1 [QSA,PT,L]还有我创造运行这个http://www.restfulapi.com/restful/users路由的时候会经由二次跳转才访问到终极api,觉得这里存在问题
经由测试得出下面个人结论
在实际非api注册中的路由是www.restfulapi.com,可以完成用户注册,而我们利用resuful框架进行api注册用户时的路由是www.restfulapi.com/restful/users和文章api www.restfulapi.com/restful/articles的路由既可以是个人对路由理解不足透彻吧!总结下,上面的路由配置和php.ini和http.conf配置才是重点,完成好就可以实现php的pathinfo模式,