2

問題のURLに丸括弧が含まれている場合、基本的な301リダイレクトをnginxで機能させるのに問題があります。

通常、私はこのタイプの基本的な場所のルール(角かっこなし)を使用します。

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

上記のように、URLに丸括弧が付いている状況があります。

ソースURL:domain1.com/abc/def(ghi)ターゲットURL: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の回答は機能しますが、一般的な修正ではありません。

基本的な問題は、()が正規表現の特殊文字であるということです。その一般的な修正は、これらの特殊文字をエスケープする こと\ですが、正規表現をで囲む場合にのみエスケープが機能するというのが落とし穴です。"

そのようです:

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 に答える