nginx 301 リダイレクトが期待どおりに動作しない

nginx 301 リダイレクトが期待どおりに動作しない

nginx.confファイルに以下のルールを追加しました

rewrite ^/top100/Armin%20van%20Buuren/(.*)$ http://www.example.com/armin-van-buuren/$1 redirect;
rewrite ^/top100/armin-van-buuren/(.*)$ http://www.example.com/armin-van-buuren/$1 redirect;
rewrite ^/top100/(.*)$ http://www.example.com/$1 redirect;

1番目のルールでは、にリダイレクトされwww.example.com/top100/Armin%20van%20Buuren/ますwww.example.com/Armin%20van%20Buuren/

他の 2 つのルールは正常に動作しています。ここで何を間違えたのでしょうか?

答え1

Nginx は内部的に正規化された URI を使用します:

マッチングは、「%XX」形式でエンコードされたテキストをデコードし、相対パス コンポーネント「.」および「..」への参照を解決し、2 つ以上の隣接するスラッシュを 1 つのスラッシュに圧縮した後、正規化された URI に対して実行されます。

文字列内のスペースを囲むには、引用符 (一重または二重) を使用します。

つまり次のようになります:

rewrite "^/top100/Armin van Buuren/(.*)$" /armin-van-buuren/$1 redirect;

関連情報