如果用户遗漏了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>