【发布时间】:2021-06-19 08:49:51
【问题描述】:
我已经编写了 nginx 重写规则来重定向所有对 /path/category 的请求,subcategory1 除外。我正在使用下面的正则表达式进行匹配,它在正则表达式测试器中工作正常。但是,当我在 Nginx conf 中提供相同的正则表达式时,如果 url 包含 # 字符,则它不适用于 negative lookahead。你有什么建议吗?
到目前为止尝试过的正则表达式:
^\/path\/category(?!.*(\bsubcategory1\b)).*$
^\/path\/category(([\/#]*)(?!.*(subcategory1))).*$
重写规则:
rewrite ^\/path\/category(?!.*(\bsubcategory1\b)).*$ https://new.host.com permanent;
路径详情: 它应该重定向到 https://new.host.com 工作正常
/path/category
/path/category/
/path/category#/
/path/category/#/
跳过 subcategory1 的重定向。它不适用于包含哈希的最后 3 个 url。
/path/category/subcategory1
/path/category/subcategory1/
/path/category/subcategory1/dsadasd
/path/category#/subcategory1
/path/category/#/subcategory1
/path/category#/subcategory1/dadsd
【问题讨论】:
-
以#开头的那部分URL称为URI fragment,在原始请求中从未发送到Nginx,所以这里Nginx帮不了你。
标签: regex nginx url-rewriting regex-lookarounds nginx-location