Nginx访问/yyy返回301永久重定向,配置未生效求助
Nginx 301重定向问题排查与解决
问题原因
当你访问http://localhost/yyy时,Nginx检测到/yyy是一个目录(你的文件存放在/yyy/xxx.html,说明/yyy是目录),而请求URI末尾没有斜杠,Nginx默认会发送301重定向到带斜杠的/yyy/,这是Nginx处理目录请求的默认行为。
解决方案
方案1:添加文件匹配规则,直接返回目标内容
调整配置,让Nginx在访问/yyy时优先匹配目标文件,避免触发目录重定向:
server { listen 80; server_name localhost; location /yyy { root /; index xxx.html; # 依次尝试匹配URI本身、目录,最后直接指定目标文件 try_files $uri $uri/ /yyy/xxx.html; } }
方案2:单独处理无斜杠的请求
显式匹配不带斜杠的/yyy请求,直接指向目标文件:
server { listen 80; server_name localhost; # 精准匹配不带斜杠的/yyy请求 location = /yyy { root /; rewrite ^ /yyy/xxx.html last; } # 处理带斜杠的/yyy/请求 location /yyy/ { root /; index xxx.html; } }
方案3:关闭自动目录重定向(不推荐,影响全局目录行为)
在server块中添加指令,关闭Nginx自动补全斜杠的重定向逻辑:
server { listen 80; server_name localhost; absolute_redirect off; location /yyy { root /; index xxx.html; } }
验证步骤
修改配置后,执行nginx -s reload重新加载配置,再次访问http://localhost/yyy即可直接返回xxx.html的内容。
内容的提问来源于stack exchange,提问作者ki pik
相关产品推荐
相关产品推荐

