如何将非www请求重定向到www?

时间:2013-04-07 12:55:41

标签: ruby-on-rails ruby-on-rails-3 apache .htaccess

我有一个Rails应用程序,我已将此代码放在应用程序的公共文件夹中的.htaccess文件中:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(example\.com)? [NC]
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L]

但是非www还没有重定向到www,Chrome也说:无限循环。我究竟做错了什么?我正在使用Apache与Passenger。

3 个答案:

答案 0 :(得分:5)

我会改用rack-canonical-host gem。

gem 'rack-canonical-host'添加到Gemfile,运行bundle并将其添加到config.ru,就在以run开头的行之前:

use Rack::CanonicalHost, 'example.com'

答案 1 :(得分:2)

您可以尝试这些重写条件和规则:

RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [L]

实际上,你的病情的表达是这样的:

RewriteCond %{HTTP_HOST} ^example\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^ [NC]

答案 2 :(得分:2)

您应该从?删除括号和RewriteCond,如下所示

RewriteCond %{HTTP_HOST} ^example\.com [NC]