在 xginx 中重写特定路径

在 xginx 中重写特定路径

我正在尝试使用 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=whateverlocationlocation ~ ^/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($|/) {

相关内容