
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;