Come rimuovere la doppia barra negli URL serviti da nginx?


8

Ho bisogno di replicare le seguenti regole di riscrittura di Apache in Nginx config su Ubuntu 12.04. Qual è il nginx equivalente a:

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


Chiunque lo abbia trovato online tenta di copiare e incollare le risposte suggerite, diffidare se stai utilizzando un'impostazione di Virtualbox con porte personalizzate. Ho dovuto cambiarlo per esempio rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent; dove 4321 è la porta esterna del nginx di Virtualbox a cui il mio browser si connette.
aexl

Risposte:


5

Vorrei suggerire questo approccio:

# 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;
}

Usa il comportamento predefinito di nginx - la fusione di barre, quindi non abbiamo bisogno di sostituire le barre, semplicemente reindirizzando

trovato qui



2

Ho trovato la risposta di Kwo a non funzionare. Guardando il mio registro di debug, questo è ciò che accade:

2014/08/18 15:51:04 [debug] 16361#0: *1 http script regex: "(.*)//+(.*)"
2014/08/18 15:51:04 [notice] 16361#0: *1 "(.*)//+(.*)" does not match "/contact-us/", client: 59.167.230.186, server: *.domain.edu, request: "GET //////contact-us//// HTTP/1.1", host: 
"test.domain.edu"

Ho trovato questo ha funzionato per me:

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

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


Il link di riferimento è quello che devi controllare. La soluzione corretta è lì. Proverò a modificare la risposta.
Anup Nair

0

Prova questo:

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

Potrebbero esserci reindirizzamenti multipli per barre & gt; 3 o più gruppi di barre.


'merge_slashes off' non ha fatto alcuna differenza e non ha comportato alcun cambiamento.
Anup Nair

-1

URL example.com//dir1////dir2///dir3 e altro Prova questo funziona per me

merge_slashes off; posizione ~ ^ (. *?) // + (. *?) $ {   restituire 301 $ 1 / $ 2; }

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.