我有一个Apache的专用服务器,我已经设置了一些VirtualHosts。 我已经build立了一个处理www域以及非www域。
我的VH .conf文件为www:
<VirtualHost *> DocumentRoot /var/www/site ServerName www.example.com <Directory "/var/www/site"> allow from all </Directory> </VirtualHost>
有了这个.htaccess
:
RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
有没有一种简单的方法将wwwredirect到非www版本? 目前我发送两个版本到相同的DocumentRoot
和使用.htaccess
但我相信我必须能够在VirtualHost文件中完成。
原来,除了RewriteBase
规则之外, mod_rewrite
规则在VirtualHosts文件中是RewriteBase
。 我结束了这个:
<VirtualHost *> ServerName www.example.com RewriteEngine on RewriteCond %{HTTP_HOST} ^www.example.com RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301] </VirtualHost>
编辑:在评论乔希的build议,我现在使用这个简化的版本使用从mod_alias
Redirect
指令:
<VirtualHost *> ServerName www.example.com Redirect 301 / http://example.com/ </VirtualHost>
您可以将ServerAlias example.com
添加到VirtualHost
但性能将与redirect不同。
编辑
既然你想redirect,你不需要高级function,似乎使用Redirect
应该已经足够了。 你会把Redirect
在VirtualHost指令下。
客户端解决scheme将使用meta refresh
标签。
对301redirect非常小心,因为默认情况下,接收301redirect的浏览器将永久存储它 – 这意味着您将放弃控制访问域www.example.com
时浏览器将会看到的内容。
请参阅此讨论http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/
所以要么确保它不被caching,要么使用mod_proxy(我推荐mod_proxy)。
如果让用户在浏览器地址栏上看到URL更改,那么使用mod_rewrite:
<VirtualHost *> ServerName www.example.com RewriteEngine on RewriteCond %{HTTP_HOST} ^www.example.com RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301,E=nocache:1] ## Set the response header if the "nocache" environment variable is set ## in the RewriteRule above. Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache ## Set Expires too ... Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache </VirtualHost>
如果你想让“redirect”对用户不可见,使用mod_proxy:
<VirtualHost *> ServerName www.example.com ProxyRequests Off <Proxy *> Order Deny,Allow Deny from all Allow from 203.0.113.67 </Proxy> ProxyPass / http://example.com/ ProxyPassReverse / http://example.com/ </VirtualHost>
应该注意的是,mod_proxy,如果configuration不当,可能会损害您的networking。
那么您可以为SERVERNAME http://www.example.com创build一个虚拟主机,并将其redirect到其他虚拟主机,其中servername example.com