Giới thiệu về hệ thốngurlencoded Forward dấu gạch chéo được phá vỡ URL
Tôi có URL của định dạng này trong dự án của tôi: -
http://project_name/browse_by_exam/type/tutor_search/keyword/class/new_search/1/search_exam/0/search_subject/0
đâu cặp từ khóa/lớp có nghĩa là tìm kiếm với từ khóa "lớp".
Tôi có một tệp index.php chung thực thi cho mọi mô-đun trong dự án. chỉ có một quy tắc viết lại để loại bỏ các index.php từ URL: -
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
Tôi đang sử dụng urlencode() trong khi chuẩn bị các URL tìm kiếm và urldecode() trong khi đọc các URL tìm kiếm.
Vấn đề
URL Chỉ có nhân vật dấu gạch chéo là vi phạm gây ra trang 404 không tìm thấy lỗi. Ví dụ, nếu tôi tìm kiếm one/two
URL là
http://project_name/browse_by_exam/type/tutor_search/keyword/one%2Ftwo/new_search/1/search_exam/0/search_subject/0/page_sort/
Làm thế nào để sửa lỗi này? Tôi cần phải giữ index.php ẩn trong URL. Ngược lại, nếu đó là không cần thiết, có sẽ không có vấn đề với dấu gạch chéo và tôi có thể đã sử dụng URL này: -
http://project_name/index.php?browse_by_exam/type/tutor_search/keyword/one
%2Ftwo/new_search/1/search_exam/0/search_subject/0
tôi cảm thấy nó là tốt nhất để có Các URL như thế này: - 'http: // project_name/browse_by_exam? Type/tutor_search/keyword/class% 2Fnew/new_search/1/search_exam/0/search_subject/0' Bằng cách đó tôi thoát khỏi những khó khăn y của khả năng đọc gây ra bởi & param1 = value1 & param2 = value2 ước và tôi cũng có thể cho phép chuyển tiếp slashes (bây giờ trong phần chuỗi truy vấn bằng cách sử dụng '?') Tôi sẽ tránh AllowEncodedSlashes vì Bobince nói 'Ngoài ra một số công cụ hoặc nhện có thể nhận được bối rối bởi nó. Mặc dù% 2F có nghĩa là/trong một phần đường dẫn là chính xác theo tiêu chuẩn, hầu hết các trang web tránh nó.' url .htaccess url-routing –
bạn có thể sử dụng% 2F nếu sử dụng theo cách này? Param1 = value1 & param2 = value% 2Fvalue nhưng nếu bạn sử dụng/param1 = value1/param2 = value% 2Fvalue nó sẽ ném một lỗi. – Ahmad
Liên quan: [Là dấu gạch chéo ("/") tương đương với dấu gạch chéo được mã hóa ("% 2F") trong phần đường dẫn của URL HTTP] (http://stackoverflow.com/q/1957115/95735) –