我正在尝试使用 nginx 重写特定路径。我已使用 nginx/php-fpm/php 设置服务器,并且运行正常。
我有以下服务器配置:
server {
listen 80;
server_name domain.com;
root /srv/www/domain.com/public;
location ~ ^/index.php($|/) {
fastcgi_split_path_info ^(.+.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
location / {
index index.php;
try_files $uri /index.php?$args;
}
}
这有效。即当我转到时,http://domain.com
它可以很好地呈现 php 文件。但是我现在试图重写特定路径。为了做到这一点,我在配置中添加了以下块(在块之前/update/whatever
):/update.php?var=whatever
location
location ~ ^/index.php($|/) {
location ~* ^\/update/(\w+)$ {
rewrite ^/update/(\w+)$ /update.php?browser=$1 last;
}
但是当我尝试访问 URL 时,http://domain.com/update/whatever
它会下载 php 文件而不是提供 PHP 解析的输出。
我也尝试将fastcgi
指令添加到该位置块,结果相同。有人能告诉我我的配置出了什么问题吗?
答案1
这一行:
location ~ ^/index.php($|/) {
告诉 nginx 仅传递index.php
给 php 解释器,并且您需要它还应用于其他 php 文件,因此这里需要更通用的规则:
location ~ ^/(.*).php($|/) {