配置nginx,支持php的pathinfo路径模式

    nginx模式默认是不支持pathinfo模式的,类似index.php/index形式的url会被提示找不到页面。下面的通过正则找出实际文件路径和pathinfo部分的方法,让nginx支持pathinfo。

    本文基于安装lnmp一键安装包,添加虚拟主机情况下进行修改。如你要添加一个网站www.linuxeye.com支持pathinfo,配置文件nginx.conf不用任何改变(个人习惯),参考lnmp一键安装包
    cat vhost/www.linuxeye.com.conf

    1. server {
    2. listen  80;
    3. server_name     www.linuxeye.com;
    4. access_log  logs/www.linuxeye.com.log combined;
    5. root /home/wwwroot/www.linuxeye.com;
    6. error_page  404  /404.html;
    7. index index.html index.htm index.php ;
    8. location / {
    9.         index  index.php;
    10.         if (!-e $request_filename) {
    11.         rewrite  ^/(.*)$  /index.php/$1  last;
    12.         break;
    13.         }
    14. }
    15. location ~ \.php {
    16. fastcgi_pass 127.0.0.1:9000;
    17. fastcgi_index index.php;
    18. include fcgi_pathinfo.conf;
    19. set $real_script_name $fastcgi_script_name;
    20.     if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
    21.     set $real_script_name $1;
    22.     set $path_info $2;
    23.         }
    24. fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
    25. fastcgi_param SCRIPT_NAME $real_script_name;
    26. fastcgi_param PATH_INFO $path_info;
    27.         }
    28. }

    要点:

    1.~ \.php 后面不能有$  以便能匹配所有 *.php/* 形式的url

    2. 通过设置更改 SCRIPT_FILENAME

    cat fcgi_pathinfo.conf

    1. #fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;  
    2. #fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; #这两行是需要注释掉的,请注意  
    3. fastcgi_param  QUERY_STRING       $query_string;  
    4. fastcgi_param  REQUEST_METHOD     $request_method;  
    5. fastcgi_param  CONTENT_TYPE       $content_type;  
    6. fastcgi_param  CONTENT_LENGTH     $content_length;  
    7.   
    8. fastcgi_param  REQUEST_URI        $request_uri;  
    9. fastcgi_param  DOCUMENT_URI       $document_uri;  
    10. fastcgi_param  DOCUMENT_ROOT      $document_root;  
    11. fastcgi_param  SERVER_PROTOCOL    $server_protocol;  
    12. fastcgi_param  HTTPS              $https if_not_empty;  
    13.   
    14. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;  
    15. fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;  
    16.   
    17. fastcgi_param  REMOTE_ADDR        $remote_addr;  
    18. fastcgi_param  REMOTE_PORT        $remote_port;  
    19. fastcgi_param  SERVER_ADDR        $server_addr;  
    20. fastcgi_param  SERVER_PORT        $server_port;  
    21. fastcgi_param  SERVER_NAME        $server_name;  
    22.   
    23. # PHP only, required if PHP was built with --enable-force-cgi-redirect  
    24. fastcgi_param  REDIRECT_STATUS    200;  

    Wed Jul 31 17:13:16 CST 2013

    • 本文由 发表于 2013-07-31
    • 转载请务必保留本文链接:https://linuxeye.com/347.html
    Nginx Lua Redis防止CC攻击 Linux

    Nginx Lua Redis防止CC攻击

    Nginx Lua Redis防止CC攻击实现原理:同一个外网IP、同一个网址(ngx.var.request_uri)、同一个客户端(http_user_agent)在某一段时间(CCseconds...
    Keepalived+Nginx架构整理版 Linux

    Keepalived+Nginx架构整理版

    Keepalived介绍 keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如...
    Nginx中文域名配置 Linux

    Nginx中文域名配置

    Nginx虚拟主机上绑定一个带中文域名,比如linuxeye.中国,浏览器不能跳转。 why? 因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中...
    Wordpress优化——利用Nginx fastcgi_cache缓存加速 Linux

    WordPress优化——利用Nginx fastcgi_cache缓存加速

    高并发网站架构的核心原则其实就一句话"把所有的用户访问请求都尽量往前推",即:能缓存在用户电脑本地的,就不要让他去访问CDN。 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了。能访问静...
    匿名

    发表评论

    匿名网友

      • avatar wow

        php.ini 中的参数是
        cgi.fix_pathinfo=0
        需要修改成
        cgi.fix_pathinfo=1 吗?