如何删除 Nginx 中 URL 参数前的尾部斜杠

如何删除 Nginx 中 URL 参数前的尾部斜杠

我有一个简单的 Nginx 站点,无论 URL 如何,它都会运行单个 PHP 文件(CSS/JS 文件除外,这些文件通常会提供)

但是,无论我做什么,并使用多个浏览器进行测试,只要我包含 GET/URL 参数,它就会在 之前添加一个尾随斜杠?。例如:

  • example.com?test=1重定向至 =>example.com/?test=1
  • example.com/path?test=1重定向至 =>example.com/path/?test=1

这是我目前使用的配置

    index index.html index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include                         fastcgi_params;
        fastcgi_index                   index.php;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_split_path_info         ^(.+\.php)(.*)$;
        fastcgi_param PATH_INFO         $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    }

有人知道如何防止这种情况发生吗?

答案1

我认为你被讨论的某个 nginx 规则所困扰 这里这意味着……

如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由 proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pa​​ss 或 grpc_pass 之一处理,则将执行特殊处理。响应 URI 等于此字符串但没有尾部斜杠的请求,将返回带有代码 301 的永久重定向到附加了斜杠的请求 URI。如果不希望这样,可以像这样定义 URI 和位置的精确匹配:

还有更多讨论。我认为您的示例 URI 实际上是由第一个位置规范处理的(显然以斜线结尾),因此请求 URI 添加了斜线。

像位置规范location ~ .*$ { commands; }可能会更好

相关内容