Nginx 在 PHP 文件参数前添加斜线

Nginx 在 PHP 文件参数前添加斜线

这是一个重写问题,但似乎与重写本身无关——我已尽我所能尝试研究它们。我正在将网站从基于 PHP 的结构移动到 Ghost,并尝试将 URL 以 的形式重定向到 。example.com/blog/blog.php?postid=28但是example.com/post-title-here/,每当我尝试访问第一个 URL 来测试重写解决方案时,它只会在 之前立即添加一个斜线,?然后继续给我 404。我注意到它在没有任何location基于 的规则的情况下这样做。这是阻止任何重写解决方案工作的原因吗?如果是这样,我该如何阻止它这样做?

example.com.conf

server {
        listen          80;
        server_name     example.com;
        location / {
                proxy_pass http://127.0.0.1:2368;
                proxy_set_header Host $host;
        }
}

答案1

我继续做了一些研究,并回答了我自己的问题。我的配置文件(存储在/etc/nginx/conf.d/)现在如下所示:

map $query_string $updated_path {
        "postid=28"     "/proper-path-to-post/";
        "postid=27"     "/another-proper-path/";
        ...
}

server {
        listen          80;
        server_name     www.domain.*;

        location /blog/blog.php {
                rewrite ^/blog/blog.php $updated_path? permanent;
        }

        location / {
                proxy_pass http://127.0.0.1:2368;
                proxy_set_header Host $host;
        }
}

我没有意识到 nginx 会将任何参数传递给 URL(后面的内容?)并将其存储在变量中$query_string,因此我之前的配置无效。map 块基本上按照其名称执行操作 - 将的情况映射$query_string到帖子的正确路径。然后,在服务器块中,位置/blog/blog.php根据参数将所有 URL 重写为正确路径。?末尾的$updated_path告诉 nginx 不要重新附加传递给 URL 的参数。

相关内容