【问题标题】:nginx rewrite url to remove subdirectorynginx 重写 url 以删除子目录
【发布时间】: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


【解决方案1】:

解决方案是在 location / 中放置一个 proxy_pass

servername dummy.com
location / {
proxy_pass 123.456.789.0:81/sub1/sub2/; 
}

不需要重写

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多