Wie entferne ich einen doppelten Schrägstrich in URLs, die von nginx bereitgestellt werden?

11000
codecowboy

Ich muss die folgenden Apache-Rewrite-Regeln in nginx config replizieren. Was ist das Nginx-Äquivalent zu:

RewriteCond % ^(.*)//(.*)$ RewriteRule . %1/%2 [R=301,L] 

Zielumgebung ist Ubuntu 12.04

7
http://stackoverflow.com/questions/14832780/nginx-merge-slashes-redirect cnst vor 11 Jahren 0
Wer das online gefunden hat und versucht, die vorgeschlagenen Antworten zu kopieren und einzufügen, ** Vorsicht **, wenn Sie ein Virtualbox-Setup mit benutzerdefinierten Ports verwenden. Ich musste es ändern, um zB `umzuschreiben (. *) // + (. *) $ Schema: // $ host: 4321 $ 1 / $ 2 permanent;` Dabei ist * 4321 * der externe Port des Nboxx der Virtualbox Mein Browser verbindet sich mit. aexl vor 6 Jahren 0

3 Antworten auf die Frage

3
SleepWalker

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 keine Schrägstriche ersetzt werden müssen, sondern nur umgeleitet werden

hier gefunden

"Wenn" ist böse: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ MacroMan vor 6 Jahren 1
2
DaveQB

Ich fand die Antwort von kwo, nicht zu arbeiten. Wenn ich mir mein Debug-Protokoll anschaue, passiert Folgendes:

18.08.2014 15:51:04 [debug] 16361 # 0: 1 http-Skript regulärer Ausdruck : "(. ) // + (. *)" 18.08.2014 15:51:04 [Bekanntmachung] 16361 # 0 : 1 "(. ) // + (. *)" Passt nicht zu "/ contact-us /", Client: 59.167.230.186, Server: * .domain.edu, Anforderung: "GET ////// contact -us //// HTTP / 1.1 ", host:" test.domain.edu "

Ich fand das funktioniert für mich:

if ($request_uri ~* "\/\/") { rewrite ^/(.*) $scheme://$host/$1 permanent; } 

Ref: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/

Referenzlink ist das, was Sie überprüfen müssen. Die richtige Lösung ist da drin. Ich werde versuchen, die Antwort zu bearbeiten. Anup Nair vor 5 Jahren 0
0
kwo

Versuche dies:

merge_slashes off; rewrite (.*)//+(.*) $1/$2 permanent; 

Es kann mehrere Weiterleitungen für Schrägstriche> 3 oder mehrere Gruppen von Schrägstrichen geben.

'merge_slashes off' machte keinen Unterschied und führte zu keiner Änderung. Anup Nair vor 5 Jahren 0