![新的永久链接结构:nginx 重写循环](https://linux22.com/image/693323/%E6%96%B0%E7%9A%84%E6%B0%B8%E4%B9%85%E9%93%BE%E6%8E%A5%E7%BB%93%E6%9E%84%EF%BC%9Anginx%20%E9%87%8D%E5%86%99%E5%BE%AA%E7%8E%AF.png)
我在我的网站上建立了一个新的永久链接结构。添加一些 nginx 重写规则后,出现一个重定向循环到 /vlogger/info/info/info/info/...
旧的固定链接:
/vlogger/user-name
新的永久链接:
/vlogger/info/user-name
当前 nginx 规则:
location ~ /vlogger/(.*)$ {
rewrite ^/vlogger/info/$1 permanent;
}
我如何检查第二个目录(/vlogger/“info/”)是否始终设置并成功重定向而没有循环?
(*用户名仅包含:a-z0-9 和 - (减号))
答案1
Nginx 终止正则表达式的搜索在第一场比赛中。因此,只需在其上方放置一个更具体的匹配即可。您需要再次使用正则表达式匹配(imo),因为仅在没有正则表达式匹配时才使用前缀匹配。(我强烈建议阅读手册:http://nginx.org/en/docs/http/ngx_http_core_module.html#location)
location ~ /vlogger/info/(.*)$ {
# whatever you want to do with them
}
location ~ /vlogger/(.*)$ {
rewrite ^ /vlogger/info/$1 permanent;
}
请注意,正则表达式可能不是您的必需品(如果您有其他正则表达式,您可能需要使用正则表达式,在我看来。再次阅读手册条目)。使用前缀字符串可能会获得更好的性能...
location /vlogger/info/ {
# whatever you want to do with them
}
location /vlogger/ {
rewrite ^ /vlogger/info/$1 permanent;
}
答案2
我找到了解决方案:
rewrite ^/vlogger/([^/]*)$ /vlogger/info/$1 permanent;
从 /vlogger/name 重定向到 /vlogger/info/name