别名/重写失败,使用正则表达式

时间:2018-01-25 23:10:30

标签: nginx nginx-location

使用如下位置块:

location ~ ^/x[0-9]/$ {
    alias /a/b/x$1/z/;
}

HTTP请求不断重定向到/a/b/x$1/index.html,没有z目录。但只有z目录存在才会发生这种情况!如果它不存在,则适当地转到:

/a/b/x$1/z/index.html

此时它会产生预期的404错误。

使用重写:

rewrite '^x([0-9])/$' /x$1/z/;  

导致相同的行为。

我能够将索引指令设置为:

index /z/index.html

这适用于加载我的HTML页面,但由于不在目录z中,所有后续请求都会失败。我需要别名才能工作,但由于某种原因,它无法正常使用正则表达式。好像由于包含了$ 1变量,最终目录被吞没了 - 但只有当它实际存在时才会被吞噬。

根据我最终想要实现的目标:我希望能够使用URI / x#提供任意数量的站点,其中#将是任何正整数,例如1-999。在服务器上,目录结构是/x#/z/index.html(例如,/ app42 / dist)。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我建议在地图中捕获网站ID,然后使用该变量来拥有动态根。你可以改编一下:serve-website-root-dynamically-based-on-domain-name

增加了好处:地图会在请求周期的早期进行评估,以便您以后可以避免某些正则表达式位置混淆。