2011-09-25 35 views
6

Tôi có một bộ quy tắc viết lại (trong một .htaccess) một cái gì đó như thế này:Không thể phù hợp% 2F trong mod_rewrite

RewriteRule ^list/vendor/(.*)$ list.php?vendor=$1 
RewriteRule ^list/product/(.*)$ list.php?product=$1 
RewriteRule ^list/(.*)$ list.php?search=$1 

(Tôi không nghĩ rằng lần đầu tiên hai có liên quan đến câu hỏi của tôi, mặc dù) .

Khi tôi gõ vào myserver.com/list/foo%2Cbar hoặc thậm chí myserver.com/list/foo/bar, tôi nhận được kết quả tôi mong đợi: list.php được gọi với foo,barfoo/bar trong $_GET['search'].

Nhưng nếu tôi nhập myserver.com/list/foo%2Fbar, có vẻ như quy tắc không khớp! Thay vào đó, tôi gặp lỗi 404. Điều gì có thể xảy ra ở đây? Apache 2.2.14, nếu nó quan trọng.

(Tôi đã thử trong Firefox và Chrome, cùng một kết quả - nhưng tất nhiên là nó có thể là trình duyệt đang hoạt động).

+0

Có thể nào Apache thậm chí không nhìn vào tệp .htaccess của tôi trong trường hợp này? Đó sẽ là một lỗi, tôi đoán ... – LHMathies

+0

Nhật ký lỗi chứa (ở mức thông tin): 'tìm thấy% 2f (được mã hóa '/') trong URI ... trả về 404' – cweiske

Trả lời

14

Bah, tôi đã tìm thấy ... Tùy chọn Apache AllowEncodedSlashes, không thể đặt cho mỗi thư mục hoặc từ .htaccess và được tắt theo mặc định.

Thời gian giải quyết sự cố, nếu tôi không thể tải các máy chủ lưu trữ để bật máy chủ ảo của mình.

+0

Khi bạn không muốn hoặc không thể thay đổi cấu hình máy chủ, bạn có thể thay thế tất cả các ký tự '/' bằng '-' trước khi tạo URL. Điều này sẽ không được mã hóa dưới dạng ký tự '% xx'. Khi bạn cần chuỗi gốc chỉ cần thay thế '-' bằng'/'một lần nữa. – LEDfan

+0

Tôi vừa mới chạy vào cùng một vấn đề cố gắng chuyển URL dưới dạng tham số trong URL mod_rewrite. Giải pháp của tôi là để tăng gấp đôi urlencode URL tôi đang cố gắng để vượt qua, sau đó ở cuối nhận tôi giải mã nó. Tôi đang sử dụng JavaScript và PHP, do đó, trên đầu JavaScript, tôi sử dụng 'encodeURIComponent (encodeURIComponent (urlToBePassed))' để những gì thực sự được truyền như tham số là 'http://example.com/url/http%253A%252F% 252Ftheurl.being.passed.com% 252FsomeDir% 252FsomeImage.png'. Một chút phức tạp nhưng dường như làm việc. –

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