如何让nginx支持ThinkPHP框架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让nginx支持ThinkPHP框架相关的知识,希望对你有一定的参考价值。

参考技术A nginx支持pathinfo,支持thinkphp
  1
  我们打开nginx的配置文件,如果是想某个站点支持,请打开对应站点的配置文件
  2

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

  将重写后的代码添加进去。
  4

  添加的代码如下:
  .........................................
  location /
  if (!-e $request_filename)
  rewrite ^/(.*)$ /index.php/$1 last;
  break;
  
  

  location ~ \.php
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  include fcgi.conf;
  set $real_script_name $fastcgi_script_name;
  if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$")
  set $real_script_name $1;
  set $path_info $2;
  
  fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  fastcgi_param SCRIPT_NAME $real_script_name;
  fastcgi_param PATH_INFO $path_info;
  
  ...................................
  注意事项
  一定要注释到原来的location ~ \.php$ ……这一段里面的代码

  不要漏掉{}
  转载本回答被提问者和网友采纳
参考技术B 让nginx支持pathinfo,支持thinkphp
1
我们打开nginx的配置文件,如果是想某个站点支持,请打开对应站点的配置文件
2

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

将重写后的代码添加进去。
4

添加的代码如下:
.........................................
location /
if (,-e $request_filename)
rewrite ^/(.*)$ /index.php/$1 last;
break;



location ~ \.php
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$")
set $real_script_name $1;
set $path_info $2;

fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;

...................................
注意事项
一定要注释到原来的location ~ \.php$ 这一段里面的代码

不要漏掉{}。

使Nginx支持ThinkPHP框架


一、nginx不支持thinkphp的原因


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


二、让nginx支持pathinfo,支持thinkphp


1、打开Nginx的配置文件,注释以下红色字体内容:


http {

  server {

        listen       80;

        server_name  localhost;

        root html;

    location / {

          index  index.php index.html index.htm;

#       location ~ .*\.(php|php5)?$

#                    {

#                            fastcgi_pass 127.0.0.1:9000;

#                            fastcgi_index index.php;

#                            include fastcgi.conf;

#                    }

    location /status {

                stub_status on;

                #access_log   off;

                }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

                {

                        expires      30d;

                }

    location ~ .*\.(js|css)?$

                {

                        expires      12h;

                }   

        #access_log off;

      }

include  vhost/*.conf;

}


2、对注释的内容进行重写,绿色字体部分!


http {

  server {

        listen       80;

        server_name  localhost;

        root html;

    location / {

           index  index.php index.html index.htm;

        #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则

        if (!-e $request_filename)

          {

             #地址作为将参数rewrite到index.php上。

             rewrite ^/(.*)$ /index.php/$1;

             #若是子目录则使用下面这句,将subdir改成目录名称即可。

             #rewrite ^/subdir/(.*)$ /subdir/index.php/$1;

             }

        }

        #proxy the php scripts to php-fpm

    location ~ \.php {

        include fastcgi.conf;

        ##pathinfo支持start

        #定义变量 $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;

        ###pathinfo支持end

        fastcgi_intercept_errors on;

        fastcgi_pass   127.0.0.1:9000;

           }

   location /status {

                stub_status on;

                #access_log   off;

                }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

                {

                        expires      30d;

                }

    location ~ .*\.(js|css)?$

                {

                        expires      12h;

                }   

        #access_log off;

      }

include  vhost/*.conf;

}


本文出自 “运维·人生” 博客,请务必保留此出处http://qiangsh.blog.51cto.com/3510397/1738226

以上是关于如何让nginx支持ThinkPHP框架的主要内容,如果未能解决你的问题,请参考以下文章

使用swoole框架还用 nginx吗

Think PHP漏洞总结(全系列)

ThinkPHP框架之验证码

thinkphp调整框架核心目录think的位置

使Nginx支持ThinkPHP框架

thinkPhp使用框架自带队列think-queue