6

リクエストURIを保持しながら、サブドメイン化されていないすべてのリクエストをwwwにリダイレクトしようとしています。

リダイレクト用の .htaccess ファイルでこれを使用しています。

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

ただし、問題は、次のようなリクエストがある場合です。

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

次の場所にリダイレクトされます。

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

これはちょっと間違っています。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 つのエンコードで問題ありませんが、2 つでは多すぎます。

4

1 に答える 1

8

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

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302,NE]
于 2013-01-23T18:15:16.540 に答える