【问题标题】:URI rewrite with nginx and php-fpm with parameters使用 nginx 和带参数的 php-fpm 重写 URI
【发布时间】:2015-12-29 06:31:22
【问题描述】:

我的 nginx 服务器上使用 php-fpm 有一堆不同的规则。

最简单的是重写,使用

http://server/$1?param=1 更改为 http://server/$1.php?param=1
location @extensionless-php {
            rewrite ^(.*)$ $1.php last;
}

我还需要将 http://server/abc/123 重写为 http://server/abc.php/123 并由 php-fpm 处理

这是fast-cgi代码:

location ~ [^/]\.php(/|$) {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

}

这是位置重写

location @abc-php {
    rewrite ^(.*)/abc/(.*)$ $1/photo.php/$2 last;
}

但我不断收到 404。我不确定哪里出错了,我们将不胜感激。

【问题讨论】:

    标签: php nginx rewrite


    【解决方案1】:

    您没有显示如何调用命名位置@abc-php。我怀疑你有这样的东西来管理无扩展的 PHP:

    location / {
        try_files $uri $uri/ @extensionless-php;
    }
    

    您的新重写规则可以添加到现有的命名位置,如下所示:

    location @extensionless-php {
        rewrite ^(.*)/abc/(.*)$ $1/photo.php/$2 last;
        rewrite ^(.*)$ $1.php last;
    }
    

    但是,您的 fast-cgi 块无法处理 path_info,因此您需要 look here 以了解常规知识,或者使用类似这样的东西:

    location ~ ^(?<script>.*\.php)(?<pathinfo>.*)$ {
        try_files $script =404;
        include fastcgi_params; 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $pathinfo;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
    

    【讨论】:

    • 我混合使用了您的解决方案和传统智慧——主要是由于 php 文件名中的一些特别复杂的结构。感谢您为我指明正确的方向。
    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2014-02-18
    • 1970-01-01
    • 2020-06-08
    相关资源
    最近更新 更多