【发布时间】:2020-10-29 18:52:15
【问题描述】:
我想重写一个 URL 以通过 nginx 从 URL 中删除重复的部分。这可能吗?
示例:dummy.com/sub1/sub2/myproject/trunk --> dummy.com/myproject/trunk
nginx重写规则是解决这个问题的正确方法吗?
location /sub1/sub2 {
rewrite ^/sub1/sub2/(.*)$ $1 last;
}
【问题讨论】:
-
是的。唯一的一点是,每个 URI 都应该以斜杠开头,所以正确的规则是
rewrite ^/sub1/sub2/(.*)$ /$1 last; -
嗯,这种方法涵盖了我发现的有关此问题的教程。但它不起作用。部分位置也是proxy_pass,可能是这个问题?我尝试通过 proxy_pass 访问服务器上的 SVN 存储库。 SVN 的路径是 123.456.789.0:81/svn/repos/$myprojects。我想消除 /svn/repos/ 在网址中。
-
如果您不希望 nginx 在重写 URI 后搜索新位置,您应该使用
rewrite ... break;而不是rewrite ... last;(检查 documentation)。但是,如果您想在通过proxy_pass将请求传递到某个后端之前添加一些 URI 前缀,那么您有一个更好的选择:location /svn/repos/ { ... proxy_pass http://123.456.789.0:81/$myprojects; }。详情请查看this Q/A。 -
或者最好将您的完整
location块添加到您的问题中。 -
@IvanShatsky 感谢您的建议。我通过将 proxy_pass 和子文件夹放在根位置找到了解决方案。服务器名称 dummy.com 位置 / { proxy_pass 123.456.789.0:81/sub1/sub2; }
标签: nginx url-rewriting