2

当有问题的 URL 带有圆括号时,我很难让基本的 301 重定向在 nginx 中工作。

通常,我会简单地使用这种类型的基本位置规则(不带括号):

location /abc/def {
rewrite /abc/def http://new.domain.com/abc/def/ permanent;
}

在上面提到的 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 有括号时,如何获得 301 重定向以在 nginx 中工作?

4

2 回答 2

0

尽管在这种特定情况下,VBart 的答案有效,但它不是一个通用的解决方案。

基本问题是(and)是正则表达式中的特殊字符,一般的解决方法是转义那些特殊字符 问题是\只有当你将正则表达式包含在"

像这样:

location /abc/def(ghi) {
  rewrite "/abc/def\(ghi\)" http://new.domain2.com/abc/defghi permanent;
}
于 2012-10-30T18:10:29.047 回答
0
location /abc/def(ghi) {
    return 301 http://new.domain2.com/abc/defghi;
}
于 2012-10-30T17:27:47.050 回答