我正在使用 Map 文件将大量位置重写到目的地:
rewrite ^ $my_redirect_map permanent;
在 Map 文件中,我的一些重定向看起来像这样(包括尾部斜杠):
/foo/ /bar;
但是,如果nginx收到没有尾部斜杠的请求,例如http://example.com/foo然后不会发生重定向 .
我可以通过包含 Map 文件中每个条目的重复项来解决这个问题,包括和不包含尾部斜杠 .
但有没有办法指示nginx在处理重写时忽略尾部斜杠?它应该以另一种方式工作,即 . 如果 Map 文件说/ foo并且请求说/ foo /它应匹配 .
1 回答
问题在于 Map 文件中的初始匹配 . 您无法在
rewrite
语句中修复此问题 .最简单的解决方案是在
map
指令的include文件中使用正则表达式:但是,一个不太优雅的解决方案是使用两个
map
指令,两者都包含相同的映射文件:但是包含文件需要指定一个尾随
/
才能匹配这两种情况 .有关详细信息,请参阅this document .