使用带参数的 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;
}
我使用 php-fpm 在我的 nginx 服务器上设置了一堆不同的规则。
最简单的是重写,使用
更改 http://server/?param=1 to http://server/$1.php?param=1location @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;
}