
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;