Nginx 301-Weiterleitungen funktionieren nicht wie erwartet

Nginx 301-Weiterleitungen funktionieren nicht wie erwartet

Ich habe meiner nginx.conf-Datei die folgenden Regeln hinzugefügt

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;

Für die 1. Regel wird umgeleitet www.example.com/top100/Armin%20van%20Buuren/zuwww.example.com/Armin%20van%20Buuren/

Die anderen beiden Regeln funktionieren einwandfrei. Was habe ich hier vermasselt?

Antwort1

Nginx verwendet intern normalisierte URIs:

Der Abgleich wird mit einer normalisierten URI durchgeführt, nachdem der im Format „%XX“ codierte Text decodiert, Verweise auf relative Pfadkomponenten „.“ und „..“ aufgelöst und zwei oder mehr nebeneinander liegende Schrägstriche möglicherweise zu einem einzigen Schrägstrich komprimiert wurden.

Verwenden Sie (einfache oder doppelte) Anführungszeichen, um das Leerzeichen in einer Zeichenfolge einzuschließen.

Es wäre also:

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

verwandte Informationen