2013-06-13 8 views
10

Sto usando il seguente RUL .htaccess per rimuovere doppie o più barre da URL web:Problema nella rimozione di doppio o più slash dalle URL .htaccess

#remove double/more slashes in url 
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ 
RewriteRule . %1/%2 [R=301,L] 

Questo sta lavorando bene per tagli si è verificato nel bel mezzo di URI, come ad esempio, se l'uso url:

http://demo.codesamplez.com/html5//audio 

suo essere reindirizzato a una corretta singolo slahs url:

http://demo.codesamplez.com/html5/audio

Ma se l'URL contiene doppie barre in principio, subito dopo il nome di dominio, poi c'è la sua non lavorano, ad esempio:

http://demo.codesamplez.com//html5/audio 

non il suo essere reindirizzato.

Come posso risolvere la regola precedente per funzionare anche per questo tipo di URL? Grazie.

risposta

12

fare un tentativo con:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/{2,} [NC] 
RewriteRule ^(.*) $1 [R=301,L] 

Dovrebbe reindirizzare ad un singolo slash alla fine del dominio. E un miglioramento sul vostro:

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

In base alla risposta, per sostituire più trattini, ho fatto: RewriteCond% {REQUEST_URI}^(. *) - (. *) $ RewriteRule. % 1-% 2 [R = 301, L] --works, thanks –

+0

Questa soluzione ha funzionato per me. Grazie –

1

Per evitare lunghe ripetizioni di caratteri nel vostro URL, ad esempio:

http://demo.codesamplez.com/html5///////////////////////////////////////////audio 

si può fare:

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

Dovrebbe funziona con:

http://demo.codesamplez.com//html5/audio 

vedi anche: .htaccess - how to remove repeated characters from url?

+1

non funzionerà se url è dominio.com // - l'url rediretto sarà lo stesso! – dude

+0

Questa risposta è abbastanza buona e funziona con l'esempio fornito. Nel tuo caso usa 'RewriteCond% {REQUEST_URI}^(. *?) (/ {2,}) (. *)? $' Per dichiarare come opzionale l'ultimo gruppo di caratteri. La prossima volta chiedi prima di votare. – RafaSashi

0

Per me, le seguenti regole funzionano perfettamente: (grazie)

<IfModule mod_rewrite.c> 
    RewriteBase/

    # rule 1: remove multiple leading slashes (directly after the TLD) 
    RewriteCond %{THE_REQUEST} \s/{2,} 
    RewriteRule (.*) $1 [R=301,L] 

    # rule 2: remove multiple slashes in the requested path 
    RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$ 
    RewriteRule (.*) %1/%2 [R=301,L] 
</IfModule> 

L'idea è fortemente basato su Marcels risposta, ma questo è un po 'più leggero e comprende il RewriteBase , che può essere utile se lavori con strutture di sottodirectory specifiche. Inoltre, la risposta Marcels manca di spiegazione, che volevo risolvere:

La regola 1: {THE_REQUEST} contiene qualcosa come GET /index.html HTTP/1.1 (vedere docs). Quindi, se abbiniamo il primo spazio bianco (\s) seguito da più barre (/{2,}), possiamo accedere all'URL corretto senza la doppia barra iniziale tramite $1.

Regola 2: l'espressione regolare ^(.*)/{2,}(.*)$ divide l'URI della richiesta su più barre. %1/%2 quindi combina nuovamente le due stringhe suddivise, ma con una sola barra in questo momento.