如何在没有URL-(重新)编码的情况下将非www重定向到带有.htaccess的www?

时间:2014-06-13 00:37:15

标签: .htaccess redirect web url-encoding

使用以下任何代码将非WWW重定向到WWW时,我遇到的问题是网址已被编码。

例如:

example.com/x%20y 

重新编码(重定向时)到:

www.example.com/x%2520y

根据RFC 3986,这是不正确的。此行为会降低mimetex输出等。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

如何在没有重新编码的情况下使用htaccess重定向到WWW

1 个答案:

答案 0 :(得分:3)

您可以尝试使用标记NE,代表no encoding

与此[R=301,NE,L]一样,看看是否有助于记住,您必须使用与您使用不同的浏览器或清除缓存,因为您使用的是301重定向他们可能已被缓存。

一个完整的例子是:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L]

我个人喜欢使用%{REQUEST_URI}