配置nginx支持pathinfo

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/backkom_jiu/article/details/79752466

配置nginx支持pathinfo

帮一个初学php的伙计项目上线,一直报404,权限和项目都没问题,最后发现是nginx对pathinfo没有支持,特此备忘
apache一般是以模块的方式运行php,apache可以对$_SERVER[‘PATH_INFO’]的值进行设置,不需要另外配置。

方法一

新版本的nginx也可以使用fastcgi_split_path_info指令来设置PATH_INFO,旧的方式不再推荐使用,在location段添加如下配置。

location ~ \.php { #去掉$
root E:/phpStudy/WWW/tp/public/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$; #增加这一句
fastcgi_param PATH_INFO $fastcgi_path_info; #增加这一句
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

完整虚拟域名示例

server {
listen 80;
server_name XXX;
root "/var/www/api";
location / { 
index index.html index.htm index.php;
autoindex on;
try_files $uri $uri/ /index.php?s=$uri&$args;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} 
location ~ \.php { #去掉$
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$; #增加这一句
fastcgi_param PATH_INFO $fastcgi_path_info; #增加这一句
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

}

}

方法二

另外一种,修改nginx.conf

location ~ \.php$    
{    
                #原有代码    
}   

#将其改成:

#去掉$是为了不匹配行末,即可以匹配.php/,以实现pathinfo    
location ~ \.php    
{    
        #原有代码    

        #定义变量 $path_info    
        set $path_info "";    
        #定义变量 $real_script_name,用于存放真实地址    
        set $real_script_name $fastcgi_script_name;    
        #如果地址与引号内的正则表达式匹配    
        if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {    
                #将文件地址赋值给变量 $real_script_name    
                set $real_script_name $1;    
                #将文件地址后的参数赋值给变量 $path_info    
                set $path_info $2;    
        }    
        #配置fastcgi的一些参数    
        fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;    
        fastcgi_param SCRIPT_NAME $real_script_name;    
        fastcgi_param PATH_INFO $path_info;    
}  

window10小问题

另外windows10 有时wamp无法启动,可能是本地world wide web publishing service占用80端口


解决方案:修改监听端口,或者停掉该服务


具体位置
计算机>>管理>>服务>>world wide web publishing service

停止,然后改为手动

猜你喜欢

转载自blog.csdn.net/backkom_jiu/article/details/79752466