我有一个网站,似乎不能从非www重定向到www。

我的Apache配置如下:

RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc] 

我错过了什么?


当前回答

不要总是使用Redirect permanent(或者为什么将来会出现问题)

如果以后有机会添加子域,不要使用永久重定向。

因为如果客户端使用了一个没有注册为VirtualHost的子域,他可能永远也不会到达这个子域,即使后来注册了。

重定向永久发送一个HTTP 301永久移动到客户端(浏览器),他们中的许多人永远缓存这个响应(直到缓存被[手动]清除)。因此,使用该子域将始终自动重定向到www.***,而无需再次请求服务器。

请参阅浏览器缓存HTTP 301多长时间?

使用重定向

<VirtualHost *:80>
  ServerName example.com

  Redirect / http://www.example.com/
</VirtualHost>

Apache.org -何时不使用mod_rewrite

Apache.org -规范主机名

其他回答

我也有同样的问题。 但是用这个解决了

RewriteEngine上 重写HTTP_HOST} ! RewriteRule ^ (. *) http://www.% {HTTP_HOST} / 1美元(R = 301 L)

将non-www重定向到www。

这个规则将www重定向到非www

RewriteEngine上 ^my-domain\.com$ [NC] RewriteRule ^ (. *) http://my-domain.com/ 1美元(R = 301 L)

参考http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/

我使用的代码是:

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

RewriteEngine上 @ HTTP_HOST} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]

检查这个完美的工作

http://example.com/subdir/?lold=13666 => http://www.example.com/subdir/?lold=13666

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

这很简单!

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