我正在尝试将所有非子请求的请求重定向到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太多了.
您需要规则的NE(无转义)重写标志.这将阻止已经转义的查询字符串被双重转义:
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302,NE]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2996 次 |
| 最近记录: |