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