当有问题的网址有圆括号时,我很难在nginx中使用基本的301重定向。
通常,我只会使用这种类型的基本位置规则(不带括号):
location /abc/def {
rewrite /abc/def http://new.domain.com/abc/def/ permanent;
}
在上面提到的情况下,URL有圆括号:
source url:domain1.com/abc/def(ghi) 目标网址:domain2.com/abc/defghi
location /abc/def(ghi) {
rewrite /abc/def(ghi) http://new.domain2.com/abc/defghi permanent;
}
不幸的是,它并不像第一个例子那么简单。我已经多次修改规则以包括转义,urlencoded用于打开和关闭圆括号,正则表达式允许在括号中捕获单个字符,似乎没有任何效果。
逃离:
location /abc/def\(ghi\)
当URL有括号时,如何在nginx中使用301重定向?
答案 0 :(得分:0)
location /abc/def(ghi) {
return 301 http://new.domain2.com/abc/defghi;
}
答案 1 :(得分:0)
虽然在这个具体案例中,VBart的回答是有效的,但这并不是一般修复。
基本问题是(
和)
是正则表达式中的特殊字符,
对此的一般解决方法是逃避那些特殊的角色
但是问题是,\
转义只有在"
location /abc/def(ghi) {
rewrite "/abc/def\(ghi\)" http://new.domain2.com/abc/defghi permanent;
}