Pathinfo路径路由模式是php5的一种url地址解释模式,而nginx默认是不支持pathinfo的路由模式的,本文介绍通过修改nginx配置文件使其支持php的pathinfo路径模式。
Nginx模式默认是不支持pathinfo模式的,类似info.php/hello形式的url会被提示找不到页面。例如CI框架,在不隐藏index.php,没有使用伪静态的情况下,就需要PATHINFO支持。
以下3步让指定的站点支持PATHINFO:
1、编辑需要开启PATHINFO站点的配置文件: /a/apps/nginx/vhosts/站点域名.conf
在 access_log xxx main; 下面增加:
set $real_script_name $fastcgi_script_name;
set $path_info "";
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
2、注释掉 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 变成:
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
3、修改 location ~ \.php$ { 为:
location ~ \.php(/.*)?$ {
改完后如图:
重启 Nginx 生效, service nginx restart
-------------------------
您好CI框架去掉index.php ,如果URL不是以/? 开始,是通过伪静态实现的。
详细请见(伪静态规则请参考本文最后):
http://gongweicui.blog.163.com/blog/static/14211065520121296225374/
如果使用了伪静态,就不需要开启PATHINFO支持了。
CI Nginx伪静态规则:if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
break;
}
-------------------------
-------------------------
set $real_script_name $fastcgi_script_name;
set $path_info "";
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
论坛可能自动加符号了,我复制了一份没换行和空格符的。
-------------------------
location /
{
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
break;
}
}
把 location / { }去掉 并把这段
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
break;
}
放到 location ~ \.php(/.*)?$ { 之前
-------------------------
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。