如何在Nginx中交换$request的部分内容并实现重定向?
Nginx URL重定向问题解决方法
你的配置出现无限重定向的核心原因是用了$request变量——它会保留完整的原请求路径(比如/place/foo/bar/),重定向后生成的新路径依然以/place开头,会再次触发location /place规则,陷入循环。
正确的做法是用正则location捕获/place之后的路径片段,再拼接成目标URL:
location ~ ^/place(.*)$ { return 301 $1place; }
配置说明:
^/place(.*)$正则会匹配所有以/place开头的请求,把/place之后的所有内容捕获到变量$1中- 重定向时将
$1与place拼接,比如原请求/place/foo/bar/会被转换为/foo/bar/place,新路径不再以/place开头,不会触发重复匹配
如果需要仅处理带斜杠的子路径(比如只匹配/place/xxx这类请求),可以调整正则为^/place/(.*)$,对应的重定向规则改为return 301 /$1place;,避免$1为空时出现以place开头的路径。
内容的提问来源于stack exchange,提问作者Alex Pen
相关产品推荐
相关产品推荐

