在Apache VirtualHost中redirectURL?

我有一个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标签。

    • mod_alias文档
    • 元刷新

    对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。