将example.com重写为www.example.com

如果用户遗漏了url,我想重写url到www子,即example.com/something.html到www.example.com/something.html

下面的configuration不起作用,用户仍然在example.com上。 有可能丢失一些非常简单的东西…

<VirtualHost *:80> DocumentRoot /data/domains/example.com/www/public ServerName www.example.com ServerAlias example.com # ErrorDocument 404 /index.pl page_not_found # CustomLog /logs/apache/example.com/access_log combined # RedirectMatch 301 ^(.*)$ http://www.example.com/ <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^!example.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] </IfModule> 

我自己的解决scheme是使用两个虚拟主机,一个非www,redirect到另一个www,如下所示:

 <VirtualHost *:80> ServerName example.com Redirect permanent / http://www.example.com/ </VirtualHost> <VirtualHost *:80> DocumentRoot /data/domains/example.com/www/public ServerName www.example.com </VirtualHost> 

这样一来,我就不必乱用那些神秘的.htaccess规则了。 KISS的原则,记得;)

Ismael Casimpan

我以不同的方式做事情)这是我的工作规则:

 # redirect www.fclose.com/* to fclose.com/* RewriteBase / RewriteCond %{HTTP_HOST} ^www\.fclose\.com$ RewriteRule ^(.*) http://fclose.com/$1 [R=301,L] 

你可以试试这些规则:

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

我改变上面的一个,并得到它们。

改变你的RewriteRule为:

 RewriteCond %{HTTP_HOST} ^domain\.com 

所以整个事情应该是这样的:

 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^domain\.com RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] </IfModule>