技术饭

wnmp下thinkphp5下解决不支持pathinfo模式解决方案

copylian    0 评论    11981 浏览    2018.03.12

wnmp下thinkphp5下解决不支持pathinfo模式解决方案,这几天开发环境换成了最新版本的wnmp,导致了运行tp5时,pathinfo模式一直报错。报错的原因是开启pathinfo模式时index.php入口文件被解析成了一个参数,再三寻研究了好几遍最后才找到了答案。

开启了pathinfo,去除了index.php,可以正常访问:

1.png

可是加了index.php之后就报错了,只有通过index.php?s=/Index/Index/index普通的访问方式才可以

2.png

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']); 希望本篇文章能对你们有所帮助!!!

飓风呀
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
wnmp thinkphp5 tp5 pathinfo 

文明上网理性发言!

  • 还没有评论,沙发等你来抢