我有一个简单的 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_pass 或 grpc_pass 之一处理,则将执行特殊处理。响应 URI 等于此字符串但没有尾部斜杠的请求,将返回带有代码 301 的永久重定向到附加了斜杠的请求 URI。如果不希望这样,可以像这样定义 URI 和位置的精确匹配:
还有更多讨论。我认为您的示例 URI 实际上是由第一个位置规范处理的(显然以斜线结尾),因此请求 URI 添加了斜线。
像位置规范location ~ .*$ { commands; }
可能会更好