2013-01-23 23 views
6

リクエストURIを保持しながら、非サブドメインのすべてのリクエストをwwwにリダイレクトしようとしています。.htaccess UTF 8文字のURLをリダイレクト

私はリダイレクトのための私の.htaccessファイルでこれを使用しています:

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

問題はしかし、私はこのような要求を持っている場合ということです:

example.com/search/?

www.example.com/search/?name=l%25C3%25A4kare 
:名前=läkareは

それはにリダイレクト

これは間違っていますが、2度エンコードしています。私はこれでこれをチェックします:

<?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 

なぜ2度エンコードするのですか?私は1エンコーディングでOKですが、2は多すぎます。

答えて

7

ルールにはNE(エスケープなし)書き換えフラグが必要です。これにより、すでにエスケープされたクエリ文字列が二重にエスケープされるのを防ぐことができます。

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