2013-01-23 34 views
6

Tôi đang cố chuyển hướng tất cả các yêu cầu không được tên miền phụ đến www trong khi vẫn giữ URI yêu cầu..htaccess Chuyển hướng URL bằng ký tự UTF 8

Tôi đang sử dụng này trong tập tin .htaccess của tôi để chuyển hướng:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302] 

Vấn đề dù là khi tôi có một yêu cầu như thế này:

example.com/search/? name = läkare

Nó chuyển hướng đến:

www.example.com/search/?name=l%25C3%25A4kare 

Đó là loại không chính xác, nó mã hóa nó hai lần. Tôi kiểm tra xem nó với điều này:

<?php 

echo rawurlencode('läkare');//outputs l%C3%A4kare 
echo "\n"; 
echo rawurldecode('l%25C3%25A4kare');//outputs l%C3%A4kare 
echo "\n"; 
echo rawurldecode(rawurldecode('l%25C3%25A4kare'));//outputs läkare 

Tại sao mã hóa nó lại hai lần và làm cách nào để giữ điều đó? Tôi ok với 1 mã hóa nhưng 2 là quá nhiều.

Trả lời

7

Bạn cần cờ ghi đè NE (không có lối thoát) cho quy tắc của mình. Điều đó sẽ ngăn chuỗi truy vấn đã thoát khỏi bị thoát kép:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302,NE] 
Các vấn đề liên quan