版权声明:本文为博主原创文章,未经博主允许不得转载。 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
停止,然后改为手动