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

shi*_*tix 6 apache .htaccess

我正在尝试将所有非子请求的请求重定向到www,同时保留请求URI.

我在我的.htaccess文件中使用它进行重定向:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
Run Code Online (Sandbox Code Playgroud)

问题是,当我有这样的请求时:

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

它重定向到:

www.example.com/search/?name=l%25C3%25A4kare
Run Code Online (Sandbox Code Playgroud)

这有点不对,它编码两次.我检查一下:

<?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
Run Code Online (Sandbox Code Playgroud)

为什么要对它进行两次编码,如何防止它这样做呢?我没有1编码,但2太多了.

Jon*_*Lin 7

您需要规则的NE(无转义)重写标志.这将阻止已经转义的查询字符串被双重转义:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302,NE]
Run Code Online (Sandbox Code Playgroud)