Như được đề cập bởi @ RandomBen , dấu gạch chéo kép rất có thể là kết quả của một lỗi ở đâu đó.
_GET /A/B//C/D HTTP/1.1 Host: chúng tôi ... _Có vẻ như các phiên bản hiện tại của Apache và IIS sẽ bỏ qua các dấu gạch chéo bổ sung trong khi giải quyết đường dẫn và trả lại tài liệu đã được trả lại nếu URL không có dấu gạch chéo. Tuy nhiên , các trình duyệt (tôi đã kiểm tra IE 8 và Chrome 9) bị nhầm lẫn bởi bất kỳ URL tương đối nào (có chứa thành phần đường dẫn cha) của các tài nguyên trong trang, tạo ra kết quả xấu. Ví dụ: nếu một trang có:
Khi tải trang _/a/b/c/_, trình duyệt sẽ yêu cầu _/a/style.css_. Nhưng nếu vì bất cứ lý do gì, thì vì thế còn __/a/b//c/_ được yêu cầu (và máy chủ bỏ qua dấu gạch chéo), trình duyệt sẽ kết thúc yêu cầu _/a/b/style.css_, sẽ không tồn tại. Rất tiếc, trang trông xấu xí.
(Điều này rõ ràng sẽ không xảy ra nếu URL không có thành phần đường dẫn cha mẹ (_.._) hoặc là tuyệt đối.)
Theo ý kiến của tôi, Apache và IIS (và có lẽ những người khác) đang hành động không chính xác là _/a/b/c/_ và _/a/b//c/_ về mặt kỹ thuật đại diện cho hai tài nguyên khác nhau. Theo RFC 2396 , mọi dấu gạch chéo đều có ý nghĩa:
Vì vậy, _/a/b/c/_ bao gồm ba phân đoạn: “a”, “b” và “c”; _/a/b//c/_ thực sự bao gồm bốn: “a”, “b”, “” (chuỗi trống) và “c”. Có hay không chuỗi trống là một thư mục hệ thống tập tin hợp lệ là một chi tiết của nền tảng của máy chủ. (Và theo logic, điều này có nghĩa là các trình duyệt đang thực sự hoạt động một cách chính xác khi phân tích cú pháp URL tương đối bằng các thành phần đường dẫn cha mẹ – trong ví dụ của tôi, chúng đi qua “c “thư mục và thư mục” “, để chúng tôi yêu cầu _ style.css_ từ” b “.)
Nếu bạn đang sử dụng Apache với _ mod_rewrite_, có một cách khá sửa chữa đơn giản :
_# remove multiple slashes anywhere in url RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2 [R=301,L] _Điều này sẽ tạo ra một chuyển hướng HTTP _ 301 Moved Permanently_ để bất kỳ dấu gạch chéo kép nào bị loại bỏ khỏi URL.