技术饭
wnmp下thinkphp5下解决不支持pathinfo模式解决方案
wnmp下thinkphp5下解决不支持pathinfo模式解决方案,这几天开发环境换成了最新版本的wnmp,导致了运行tp5时,pathinfo模式一直报错。报错的原因是开启pathinfo模式时index.php入口文件被解析成了一个参数,再三寻研究了好几遍最后才找到了答案。
开启了pathinfo,去除了index.php,可以正常访问:
可是加了index.php之后就报错了,只有通过index.php?s=/Index/Index/index普通的访问方式才可以
nginx原始配置:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass php_processes;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
解决方案配置:
location ~ .php {
#原有代码
fastcgi_pass php_processes;
fastcgi_index index.php;
include fastcgi.conf;
#定义变量 $path_info ,用于存放pathinfo信息
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;
include fastcgi_params;
}
值得注意的是在配置中,将location ~ \.php$ 改为 location ~ \.php,这里去掉了$符号,就可以解决问题了。如果仍未解决,在ThinkPHP入口文件index.php中加入配置define(‘_PHP_FILE_',$_SERVER['SCRIPT_NAME']); 希望本篇文章能对你们有所帮助!!!
文明上网理性发言!