pathinfo
我也配置了很多次了,前面都快放弃了,最近在学习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 on rewritecond %{request_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ 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
在代码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) "[email protected]" | |
["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":"用户名不能为空"} |
发现
RewriteEngineon RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ 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模式,
若有大神看到这篇文章,发现我写的有问题,可以告知我,谢谢留个私人qq:1262638533
相关阅读
那么大家都知道2013年的微信刚萌芽的时候,很多人都不知道微信是能够赚钱的工具,那么这个过程当中产生出了微小的商人,就指的是在微信
最新支持的各个版本Visual C ++ 2017 2015 2013 2010
适用于: Microsoft Visual Studio 2008专业版Microsoft Visual Studio 2008标准版Visual Studio 2010 Professional 下面链接列
我们注意到,稀货街平台自上线以来,在市场运作和产品经营方面,都非常类似于美国手工品网络商店平台Etsy。希望借鉴美国Etsy在市场营销
随着这两年大量B2B交易平台的上线,供应链金融作为其中B2B交易中比较重要的一环,再次火热起来,但如何抓住供应链金融的核心,实现金融资
简单工厂模式 1.什么是工厂? 用一个单独的类来做这个类创造实例的过程,这就是工厂。 2.它解决了那些问题?简单工厂模式解决了对象