如何正确配置Nginx 301重定向解决循环重定向问题?
解决Nginx 301重定向循环问题
你的问题根源在于重定向后的URL依然会被当前location规则匹配,导致无限循环叠加article路径。原配置中location /blog/(.*)$会匹配所有以/blog/开头的URL,包括重定向后的/blog/article/some-article,所以每次跳转都会再次执行rewrite,最终生成一堆重复的article。
正确配置方案(推荐)
使用正则location排除已经包含/article/的路径,彻底避免循环:
location ~ ^/blog/(?!article/) { rewrite ^/blog/(.*)$ /blog/article/$1 permanent; }
^/blog/(?!article/):正则断言,仅匹配以/blog/开头,但后续不是article/的路径permanent:代表301永久重定向,比原配置的redirect(临时302)更适配SEO场景- 注意重定向目标要写完整的
/blog/article/$1,原配置里^/blog/article$1缺少分隔符/,这也是路径异常的诱因之一
备选方案(用if条件过滤)
如果不想修改location规则,也可以在原location内添加判断条件,跳过已包含article的路径:
location /blog/ { if ($request_uri !~ /article/) { rewrite ^/blog/(.*)$ /blog/article/$1 permanent; } }
不过Nginx官方不推荐在location内滥用if指令,因此优先选择第一种正则location方案。
内容的提问来源于stack exchange,提问作者ViktorasssIT
相关产品推荐
相关产品推荐

