2011-06-29 15 views
45

Chúng tôi có một số quy tắc mod_rewrite rất cơ bản:mod_rewrite urlencoding tham số chuỗi truy vấn đã được mã hóa - bất kỳ cách nào để vô hiệu hóa tính năng này?

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L] 

mod_rewrite dường như để làm công việc của mình, và nếu người dùng đang truy cập:

something.swf?param=value, nó được chuyển hướng một cách chính xác để http://www.newdomain.com/something.swf?param=value

vấn đề là trong trường hợp này:

www.olddomain.com/something.swf?param=URL_ENCODED_VALUE 

điều gì xảy ra cuối cùng là mod_rewrite mất nó khi nó tự tái urlencode chuỗi truy vấn param

vì vậy những gì người dùng kết thúc với là:

www.olddomain.com/something.swf?param=URL_ENCODED_VALUE 

chuyển hướng đến

www.newdomain.com/something.swf?param=URL_ENCODED_VALUE_OF_URL_ENCODED_VALUE 

vì vậy chúng tôi kết thúc với một double-urlencoded giá trị. boourns!

Trong khi tôi hiểu rằng chúng tôi có thể thực hiện quy tắc \?(.*) ... ?$1 cho điều này, tôi nghĩ rằng phải có cách để thông báo cho mod_rewrite NOT để urlencode tham số chuỗi truy vấn ... chúng tôi muốn tránh sử dụng 2 quy tắc từ đường dẫn hợp lệ là:

something.swf (no query string) 

something.swf?someparams... 

để yea, lý tưởng ... chỉ cần nói với mod_rewrite: xin vui lòng, không urlencoding của params chuỗi truy vấn ... chỉ passthru trực tiếp đến URL mới thông qua R=302.

+2

doh! câu trả lời là, tham số NE. lấy làm tiếc! –

+2

Đặt cược là. Bạn có thể cung cấp câu trả lời và đánh dấu nó như được chấp nhận không? (Tôi đoán có giới hạn thời gian để làm điều đó, nhưng hãy làm ngay khi bạn có thể xin vui lòng: P) –

+0

yea nói rằng tôi cần 100 đại diện để trả lời câu hỏi của riêng tôi trong ít hơn 8 giờ. sẽ trả lời sau. –

Trả lời

89

cách để thực hiện điều này là thông qua tham số NE (không thoát).

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L] 

nên trên thực tế đọc

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,NE,L] 

này sẽ buộc mod_rewrite để lại tất cả các giá trị chuỗi truy vấn như họ đang có, mà không làm bất kỳ mã hóa/thoát.

dễ dàng như vậy :)

+0

Đã khắc phục sự cố của tôi, cảm ơn! – Teekin

+0

Có thể thực sự có lỗi liên quan đến điều này. NE là một tùy chọn tốt cho đến khi bạn cũng có các ký tự được mã hóa URL trong phân đoạn đường dẫn của URL. Xem: http://serverfault.com/questions/331899/apache-mod-rewrite-double-encodes-query-string-on-redirect – Ryan

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