使用带参数的 nginx 和 php-fpm 重写 URI

URI rewrite with nginx and php-fpm with parameters

我使用 php-fpm 在我的 nginx 服务器上设置了一堆不同的规则。

最简单的是重写,使用

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

我还需要重写 http://server/abc/123 to 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/(.*)$ /photo.php/ last;
}

但我一直收到 404。我不确定哪里出错了,如有任何帮助,我们将不胜感激。

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

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

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

location @extensionless-php {
    rewrite ^(.*)/abc/(.*)$ /photo.php/ last;
    rewrite ^(.*)$ .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;
}