Apache .htaccess使用UTF 8字符重定向URL

Apache .htaccess使用UTF 8字符重定向URL,apache,.htaccess,Apache,.htaccess,我试图将所有非子域请求重定向到www,同时保留请求URI 我在.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

我试图将所有非子域请求重定向到www,同时保留请求URI

我在.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
这有点不正确,它对它进行了两次编码。我用这个来检查:

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

您需要规则的
NE
(无转义)重写标志。这将防止已转义的查询字符串获得双转义:

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