Nginx下ThinkPHP5的配置方法详解

    公司有一款即将上线的应用服务端是基于ThinkPHP写的,本地测试无异常,上传到外网服务器后无法连接。这可把我和我的小伙伴们吓死了,怎么回事儿,本地测试都是对的呀!我和我的小伙伴们开始找原因,换了一台服务器,上传上去测试可行。这两台服务器的区别在于,一台是LAMP,一台是LNMP。而出问题的就是那天LNMP。度娘后知道,nginx默认情况下不支pathinfo模式,从而不能支持ThinkPHP。

nginx不支持thinkphp的原因

    ThinkPHP支持通过PATHINFO和URL rewrite的方式来提供友好的URL,只需要在配置文件中设置 'URL_MODEL' => 2 即可。在Apache下只需要开启mod_rewrite模块就可以正常访问了,但是Nginx中默认是不支持PATHINFO的,所以nginx默认情况下是不支持thinkphp的。不过我们可以通过修改

nginx的配置文件来让其支持thinkphp。

我们注释掉配置文件中那些被我圈出来的语句(location ~ \.php$ {……}这一段里面的),我们将对这部分进行重写!


try_files举例如下:
location /
{
  try_files $uri $uri/ /index.php?s=$uri&$args; #如果请求不是文件或目录,则将uri交给index.php处理,同时保留参数
}


pathinfo配置

location ~ [^/]\.php(/|$) {

set $path_info "";                                                #定义变量 $real_script_name,用于存放真实地址
set $real_script_name $fastcgi_script_name;        #如果地址与引号内的正则表达式匹配

 if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {

             set $real_script_name $1;                     #将文件地址赋值给变量 $real_script_name

             set $path_info $2;                                #将文件地址后的参数赋值给变量 $path_info

 }

fastcgi_pass unix:/tmp/php-cgi.sock;     #配置fastcgi的一些参数

fastcgi_index index.php;
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;
}
 

猜你喜欢

转载自blog.csdn.net/martingpf/article/details/80843544