nginxの大文字と小文字を区別しない書き換え


15

私はnginxリダイレクトをできるだけきれいにしようとしています。〜*は大文字と小文字を区別しないことを理解していますが、例2でのみ動作させることができます。

例1

rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

例2-これは機能しますが、上記の行ほど効率的ではありません。

if ( $request_filename ~* foobar ) {
         rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
   }

例1で大文字と小文字を区別しないリダイレクトを行う方法はありますか?

ありがとう。

回答:


10

私はちょうどこの同じ問題を抱え(そして修正し)、答えを見つけようとしてここにたどり着きました。nginxのドキュメント(http://nginx.org/en/docs/http/ngx_http_rewrite_module.html)では、〜*がifステートメント内でのみ機能することを明確に述べていませんが、明らかにそうです。

ifステートメント以外でngnix URL書き換えの大文字と小文字を区別しない正規表現の一致を取得するには、Apache / Perlスタイルを使用する必要がありました。

rewrite "(?i)foobar" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

http://perldoc.perl.org/perlretut.html(insensitiveを検索)を参照してください。また、特定のキャプチャグループの外側にプレフィックス(?i)を付けると、検索文字列全体に適用されるようです。注:これは、「^」が暗示されているように見えるため、「^(?i)foobar」では機能しないようです。

ただし、念のため、また将来の書き換えを管理しやすくし、それらをまとめて行う場合に曖昧さを軽減するために、次のようなことをすることをお勧めします。

location /foobar {
     rewrite "(?i)" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}

お役に立てれば...


30

この仕事をするために私が見つけたもの:

rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

あなただけがこれをする必要があります:

rewrite (?i)^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

これは単に先頭に追加する(?i)ことを意味し、それ以外はすべて一致するものと同じです。


4
これは受け入れられた答えであるはずです。
thekingoftruth

2
ありがとうございました。Nginxのドキュメントでは非常に簡単ですが、見つけるのは非常に困難です。簡潔なポインターに感謝します!
PKHunter

0

今すぐウェブサイトで作業していると、これもうまくいくようです。同じ状況にある人なら、この数時間でした。

location ~* ^/foobar {
  rewrite ^(.*)$ $scheme://$http_host/whatever/foobar redirect;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.