3

我的客户希望使用 301 重定向来强制在他们的网站上使用“www”子域。所以'example.com/something'解析为'www.example.com/somthing'等。

我想要做的只是将它添加到我的虚拟主机文件中:

<VirtualHost *:80>
  ServerAdmin webmaster@localhost     
  ServerName  example.com
  ServerAlias www.*
  DocumentRoot /data/apps/example.com/current/public
  RailsBaseURI / 

  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^example\.com
  RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]
</VirtualHost>

我还确保通过以下方式启用了 mod 重写:

sudo a2enmod rewrite
sudo /etc/init.d/apache2 force-reload

我目前努力的结果基本上看起来是成功的。Apache 重新启动,一切都按预期工作,除了重写没有发生。所以 'www.example.com' 和 'example.com' 都可以解析。浏览器没有被重定向到“www.example.com”。有任何想法吗?我已经尝试重新加载配置并重新启动 apache 几次,但我似乎无法让重写规则正常工作。我是否通过将它们放置在虚拟主机而不是 .htaccess 文件中来将它们设置在错误的位置?

这里的任何建议都会很有用。我完全感到困惑。

4

1 回答 1

11

把它放在你的主 VirtualHost 条目下面:

<VirtualHost *:80>
    ServerName example.com
    RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>

您的主 VirtualHost 应该有一个 ServerName www.example.com 条目,并且没有别名或重定向。此外,此重定向不需要 mod_rewrite。

于 2009-12-13T12:20:18.580 回答