2013-06-13 36 views
10

Tôi đang sử dụng Rul htaccess sau để loại bỏ dấu gạch chéo đôi hoặc nhiều hơn từ các url web:Issue Trong Loại bỏ đúp hoặc nhiều gạch chéo từ URL By .htaccess

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

này đang làm việc tốt cho dấu gạch chéo xảy ra ở giữa URI, chẳng hạn như, nếu sử dụng url:

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

của nó được chuyển đến đúng đơn slahs url:

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

Nhưng nếu url chứa dấu gạch chéo đôi lúc đầu, ngay sau tên miền, sau đó nó không làm việc, ví dụ:

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

của nó không được chuyển hướng.

Làm cách nào để tôi có thể sửa quy tắc trên cũng hoạt động đối với loại url này? Cảm ơn.

Trả lời

12

Hãy thử với:

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

Nó nên chuyển hướng đến một dấu gạch chéo đơn ở phần cuối của tên miền. Và một sự cải tiến trên của bạn:

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

Dựa vào câu trả lời của bạn, để thay thế nhiều dấu gạch nối, tôi đã làm: RewriteCond% {REQUEST_URI}^(. *) - (. *) $ RewriteRule. % 1-% 2 [R = 301, L] --works, nhờ –

+0

Giải pháp này hiệu quả với tôi. Cảm ơn –

1

Để ngăn chặn sự lặp lại dài của nhân vật trong url của bạn như:

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

bạn có thể làm:

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

Nó nên làm việc với:

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

xem thêm: .htaccess - how to remove repeated characters from url?

+1

sẽ không hoạt động nếu url là miền.com // - url được chuyển hướng sẽ giống nhau! – dude

+0

Câu trả lời này đủ tốt và làm việc với ví dụ đã cho. Trong trường hợp của bạn, hãy sử dụng 'RewriteCond% {REQUEST_URI}^(. *?) (/ {2,}) (. *)? $' Để khai báo tùy chọn nhóm ký tự cuối cùng. Lần tới hãy hỏi trước khi bỏ phiếu xuống. – RafaSashi

0

Đối với tôi, các quy tắc sau hoạt động hoàn hảo: (! Thanks)

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

Ý tưởng này được chủ yếu dựa vào Marcels câu trả lời, nhưng điều này là một chút nhẹ hơn và bao gồm các RewriteBase , có thể hữu ích nếu bạn làm việc với các cấu trúc thư mục con cụ thể. Ngoài ra, Marcels trả lời thiếu lời giải thích mà tôi muốn sửa:

Quy tắc 1: {THE_REQUEST} chứa một cái gì đó như GET /index.html HTTP/1.1 (xem docs). Do đó, nếu chúng ta khớp khoảng trắng đầu tiên (\s) theo sau là nhiều dấu gạch ngang (/{2,}), chúng tôi có thể truy cập URL chính xác mà không có dấu gạch chéo kép hàng đầu qua $1.

Quy tắc 2: Biểu thức chính quy ^(.*)/{2,}(.*)$ chia URI yêu cầu trên nhiều dấu gạch chéo. %1/%2 sau đó kết hợp lại hai chuỗi được chia tách, nhưng chỉ với một dấu gạch chéo tại thời điểm này.

Các vấn đề liên quan