让 nginx 支持thinkphp 的 PATH_INFO 和 URL Rewrite模式支持

情况简介:

   我们的网站是thinkphp框架开发的,之前一直在apache+php下面运行.很想换到nginx上试试,经过百般折腾无果.无奈去官方发现是nginx不支持thinkphp的 PATH_INFO 和 URL Rewrite模式,不过还好官方也给出了相应的解决办法。下面就是实验的过程全记录。


实验环境介绍:

   系统 : centos 6.4 x86_64

   ip   : 192.168.80.141

   环境 : lnmp

   版本 : nginx-1.4.1 , PHP-5.4.0 ,mysql-5.1.62 ,thinkphp 3.0


至于lnmp 环境的搭建在这里就不多说了,网上很多. 下面在介绍一下我的目录存放的介绍。这个地方要仔细看 因为跟nginx 里面的配置有很多的联系。


  nginx :  /usr/local/nginx/

  php   :  /usr/local/php/

  网站根目录: /usr/local/nginx/html/


------------------开始配置nginx支持thinkphp----------------------------

原始配置内容:

user  nobody;
worker_processes  1;
error_log  logs/error.log  info;
pid        logs/nginx.pid;
events {
    use epoll;
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.php index.html index.htm;
        }
        location /status {
            stub_status on;
            access_log   on;
            allow 192.168.80.0/24;
        }
                                                                                                                                                      
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

-----------------------------------------------------------------------------------

修改后支持thinkphp的内容:

user  nobody;
worker_processes  1;
error_log  logs/error.log  info;
pid        logs/nginx.pid;
events {
    use epoll;
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
                                                                                                                              
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.php index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php {                   #去掉后面的$
            root           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  /scripts$fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;  # 这个是在配置nginx+php整合的时候就改好的$前面的是网站的主目录
            include        fastcgi_params;
        }
        if (!-e $request_filename)
            {
            #地址作为将参数rewrite到index.php上。
             rewrite ^/(.*)$ /index.php/$1;
            #   若是子目录则使用下面这句,将subdir改成目录名称即可。
            # rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
            #    }
            }
    }
server {
        listen       80;
        server_name  s.abc.org;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /status {
            stub_status on;
            access_log   on;
            allow 192.168.80.0/24;
        }
    }
}

-----------------至此nginx已经支持了thinkphp---------------------------------

有个小的问题,nginx的状态查看页面。即:http://IP/status 在配置好了支持thinkphp之后,竟然无法正常工作了,所以我把它单独建立了一个虚拟机来解决。主机名s.abc.org

错误的status

再来个搞定之后的测试截图:

--------------------祝各位早日搞定----------------------------------

     


   

你可能感兴趣的:(nginx,thinkphp)