如何编写Nginx重定向规则:将未匹配URL跳转到/main/
搞定Nginx重定向的方案
嘿,这个需求很容易实现,你只需要在现有规则之前加一条正则匹配的location规则就行,具体配置我给你写出来:
# 拦截所有非/main/开头的请求,重定向到/main/ location ~ ^/(?!main/) { return 302 /main/; } # 你的原有规则保持不动 location /main/ { root /app/dist; try_files $uri /index.html =404; }
给你拆解下这条规则的细节:
~ ^/(?!main/)是正则匹配的核心:^/匹配所有根路径开头的请求,(?!main/)是「负向前瞻」,意思是排除那些已经以main/开头的路径,刚好符合你要的“非/main/的URL都跳转”的需求。return 302 /main/是临时重定向(HTTP状态码302),如果是正式上线需要永久重定向(比如利于SEO),可以改成return 301 /main/——不过注意301会被浏览器缓存,调试阶段用302更灵活,避免缓存坑。- 重点! 这条规则必须放在你原有
location /main/的前面!因为Nginx匹配location是有优先级的,正则匹配优先级高于普通前缀匹配,放在前面才能先拦截非/main/的请求,不然原有规则会先匹配/main/的请求,但其他请求可能被默认规则处理,达不到跳转效果。
额外小技巧(按需选择):
如果你想让跳转后保留原来的路径后缀(比如访问/about自动跳转到/main/about,/contact/us跳转到/main/contact/us),可以把重定向规则改成这样:
location ~ ^/(?!main/) { return 302 /main$request_uri; }
这样就完美适配两种不同的跳转需求啦~
内容的提问来源于stack exchange,提问作者hh54188
相关产品推荐
相关产品推荐

