2013-06-13 11 views
10

Używam następujący htaccess RUL usunąć podwójne lub więcej ukośniki z adresów URL internetowych:Problem usuwania podwójnych lub więcej ukośniki z adresu URL .htaccess

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

To działa dobrze dla ukośniki wystąpił w środku URI, takich jak, jeśli wykorzystanie URL:

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

Jego przekierowany do właściwego pojedynczego slahs URL:

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

Ale jeśli adres URL zawiera podwójne ukośniki na początku, zaraz po nazwie domeny, wtedy jej nie działa, przykład:

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

jej nie przekierowany.

W jaki sposób mogę naprawić powyższą regułę, aby działała również dla tego typu adresów URL? Dzięki.

Odpowiedz

12

Spróbować z:

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

Trzeba przekierować do pojedynczego ukośnika na końcu domeny. a poprawa na Twoja:

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

Na podstawie Twojej odpowiedzi, aby zastąpić wiele myślników, napisałem: RewriteCond% {REQUEST_URI}^(. *) - (. *) $ RewriteRule. % 1-% 2 [R = 301, L] - pracuje, dzięki –

+0

To rozwiązanie sprawdziło się. Dzięki –

1

Aby uniknąć długiego powtórzenia znaków w adresie URL, takich jak:

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

można zrobić:

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

Powinno współpracuje z:

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

zobacz także: .htaccess - how to remove repeated characters from url?

+1

nie będzie działać, jeśli URL jest domeną.com // - przekierowany adres URL będzie taki sam! – dude

+0

Ta odpowiedź jest wystarczająco dobra i działa z podanym przykładem. W twoim przypadku użyj 'RewriteCond% {REQUEST_URI}^(. *?) (/ {2,}) (. *)? $', Aby zadeklarować jako opcjonalną ostatnią grupę znaków. Następnym razem zapytaj przed głosowaniem. – RafaSashi

0

Dla mnie, następujące zasady działa perfekcyjnie: (! Dzięki)

<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> 

Pomysł jest mocno oparta na Marcels odpowiedź, ale ten jest nieco bardziej lekka i zawiera RewriteBase , co może być pomocne, jeśli pracujesz z określonymi strukturami podkatalogów. Dodatkowo, odpowiedź Marcelsa nie zawiera wyjaśnienia, które chciałem naprawić:

Reguła 1: {THE_REQUEST} zawiera coś takiego jak GET /index.html HTTP/1.1 (patrz docs). Dlatego jeśli dopasujemy pierwsze białe spacje (\s), a następnie wielokrotne ukośniki (/{2,}), możemy uzyskać dostęp do poprawnego adresu URL bez wiodącego podwójnego ukośnika przez $1.

Reguła 2: wyrażenie regularne ^(.*)/{2,}(.*)$ dzieli identyfikator URI żądania na wiele ukośników. %1/%2 następnie łączy dwa splintowane łańcuchy ponownie, ale z jednym tylko cięciem w tym czasie.

Powiązane problemy