Wer dies online gefunden hat und versucht, die vorgeschlagenen Antworten zu kopieren und einzufügen, sollte vorsichtig sein, wenn Sie ein Virtualbox-Setup mit benutzerdefinierten Ports verwenden. Ich hatte es zu ändern zB zu sein , rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;wo 4321 die externen Port des Virtualbox'd ist nginx mein Browser eine Verbindung herstellt zu.
Aexl
Antworten:
6
Ich möchte diesen Ansatz vorschlagen:
# remove multiple sequences of forward slashes
# rewrite URI has duplicate slashes already removed by Nginx (merge_slashes on), just need to rewrite back to current location
# note: the use of "^[^?]*?" avoids matches in querystring portion which would cause an infinite redirect loop
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$host$uri permanent;
}
Es verwendet das Standardverhalten von Nginx - das Zusammenführen von Schrägstrichen, sodass wir keine Schrägstriche ersetzen müssen, sondern einfach umleiten
'merge_slashes off' machte keinen Unterschied und führte zu keiner Änderung.
Anup Nair
1
Warum funktioniert das nicht merge_slashes on;einfach? Ist Nginx fehlerhaft?
Jonathan
1
@ Jonathan - Ich bin auch gerade darauf gestoßen. Mein Verständnis ist, dass merge_slashes ondas nicht das tut, was Sie denken. Grundsätzlich wird nginx angewiesen, // und / und /// als einzelnen Schrägstrich zu verwenden (nicht zusammenzuführen und umzuleiten)
Andrew Newby
1
Ich spreche aus der Erfahrung, mehrere Produktionsserver und Entwicklungsserver für ein Team zu betreiben. Tun Sie dies nicht in Nginx. Verwenden Sie stattdessen Ihren Router auf Ihrem Anwendungsserver (JS / PHP usw.).
Nginx ist für inhaltliche Arbeiten nicht zuverlässig. Beispielsweise sind Weiterleitungen, Umschreibungen und ifKlauseln nicht deterministisch, wenn Sie Ihr Setup so ändern, dass SSL, ein Reverse-Proxy, versteckte Ports usw. verwendet werden. Möglicherweise funktioniert es in einer Umgebung ordnungsgemäß, in einer anderen kann es jedoch unmöglich sein, es zum Laufen zu bringen.
Halten Sie sich an eine geeignete Programmiersprache, um Probleme zu lösen, selbst wenn Sie doppelte Schrägstriche zusammenführen. Du wirst mir später danken.
Obwohl ich Ihrer Ansicht zustimme, glaube ich, dass wir den Menschen die Möglichkeit geben sollten, sich eine eigene Meinung zu dieser Angelegenheit zu bilden. Ich bevorzuge Apache gegenüber Nginx aus demselben Grund wie Ihren. Beachten Sie, dass Apache mod_rewrite auch als einfache Programmiersprache betrachtet werden kann. :-)
rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;
wo 4321 die externen Port des Virtualbox'd ist nginx mein Browser eine Verbindung herstellt zu.Antworten:
Ich möchte diesen Ansatz vorschlagen:
Es verwendet das Standardverhalten von Nginx - das Zusammenführen von Schrägstrichen, sodass wir keine Schrägstriche ersetzen müssen, sondern einfach umleiten
hier gefunden
quelle
proxy_pass
Ich fand kwos Antwort, nicht zu funktionieren. Wenn Sie sich mein Debug-Protokoll ansehen, geschieht Folgendes:
Ich fand das funktionierte für mich:
Ref: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/
quelle
Versuche dies:
Es kann mehrere Weiterleitungen für Schrägstriche> 3 oder mehrere Gruppen von Schrägstrichen geben.
quelle
merge_slashes on;
einfach? Ist Nginx fehlerhaft?merge_slashes on
das nicht das tut, was Sie denken. Grundsätzlich wird nginx angewiesen, // und / und /// als einzelnen Schrägstrich zu verwenden (nicht zusammenzuführen und umzuleiten)Ich spreche aus der Erfahrung, mehrere Produktionsserver und Entwicklungsserver für ein Team zu betreiben. Tun Sie dies nicht in Nginx. Verwenden Sie stattdessen Ihren Router auf Ihrem Anwendungsserver (JS / PHP usw.).
Nginx ist für inhaltliche Arbeiten nicht zuverlässig. Beispielsweise sind Weiterleitungen, Umschreibungen und
if
Klauseln nicht deterministisch, wenn Sie Ihr Setup so ändern, dass SSL, ein Reverse-Proxy, versteckte Ports usw. verwendet werden. Möglicherweise funktioniert es in einer Umgebung ordnungsgemäß, in einer anderen kann es jedoch unmöglich sein, es zum Laufen zu bringen.Halten Sie sich an eine geeignete Programmiersprache, um Probleme zu lösen, selbst wenn Sie doppelte Schrägstriche zusammenführen. Du wirst mir später danken.
quelle
Ich mag diese Lösung:
Siehe https://stackoverflow.com/a/27071557/548473
quelle
URL example.com//dir1////dir2///dir3 und mehr Versuchen Sie dies, es funktioniert für mich
merge_slashes off; location ~ ^ (. *?) // + (. *?) $ {return 301 $ 1 / $ 2; }}
quelle