我有一个带有 Apache 的专用服务器,我在上面设置了一些 VirtualHosts。我已经设置了一个来处理 www 域以及非 www 域。
我的 www 的 VH .conf 文件:
<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]
有没有一种简单的方法可以将 www 重定向到非 www 版本?目前我将两个版本发送到相同的版本DocumentRoot
并使用.htaccess
,但我确信我必须能够在 VirtualHost 文件中做到这一点。
事实证明
mod_rewrite
,除了规则之外,VirtualHosts 文件中的规则很好RewriteBase
。我最终得到了这个:编辑:根据 joschi 在评论中的建议,我现在使用以下
Redirect
指令使用这个简化版本mod_alias
:对 301 重定向要非常小心,因为默认情况下,接收 301 重定向的浏览器会将其永久存储 - 这意味着您将放弃控制该浏览器在尝试访问域时将看到的内容
www.example.com
。例如,请参阅此讨论http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/
所以要么确保它没有被缓存,要么使用 mod_proxy(我推荐 mod_proxy)。
如果您可以让用户看到浏览器地址栏上的 URL 更改,请使用 mod_rewrite:
如果您希望“重定向”对用户不可见,请使用 mod_proxy:
应该注意的是,如果 mod_proxy 配置不当,可能会损害您的网络。
您可以添加
ServerAlias example.com
到,VirtualHost
但性能将不同于重定向。编辑
由于您想要重定向并且您不需要高级功能,因此似乎 using
Redirect
对您来说就足够了。你可以把它Redirect
放在一个 VirtualHost 指令下。客户端解决方案是使用
meta refresh
标签。好吧,您可以为 SERVERNAME www.example.com 创建一个虚拟主机,并将其重定向到另一个具有服务器名称 example.com 的虚拟主机