我如何强制使用Apache2 + Rails + Phusion Passenger的'www'子域?

时间:2009-12-13 12:12:46

标签: ruby-on-rails mod-rewrite apache2 passenger vhosts

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

我想要做的只是将其添加到我的vhost文件中:

<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几次,但我似乎无法让重写规则正常工作。我是通过将它们放在vhost中而不是.htaccess文件中将它们放在错误的位置吗?

这里的任何建议都会有用。我完全不知所措。

1 个答案:

答案 0 :(得分:11)

将其放在VirtualHost主条目下方:

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

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