我有一个网站,似乎不能从非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] 

我错过了什么?


当前回答

重定向域。TLD到www。

以下行可以添加到Apache指令或.htaccess文件中:

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

其他的子域仍在工作。 不需要调整线条。只需复制/粘贴到正确的位置。

如果你修改了vhost,不要忘记应用apache的变化。

(基于默认的Drupal7 .htaccess,但应该在很多情况下工作)

其他回答

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

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/

我发现在使用多个vhost时使用ServerAlias更容易(也更有用)。

<VirtualHost x.x.x.x:80>
    ServerName www.example.com
    ServerAlias example.com
    ....
</VirtualHost>

这也适用于https vhosts。

试试这个:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*) http://www.example.com$1 [R=301]
<VirtualHost *:80>
    ServerAlias example.com
    RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
<VirtualHost *:80>
    ServerAlias example.com
    RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>

这将重定向不仅域名,而且内部 pages.like…… example.com/abcd.html               ==>    www.example.com/abcd.html example.com/ab/cd.html ? ef = gh   ==>     www.example.com/ab/cd.html ? ef = gh