我知道有很多问题可以回答这个问题。我熟悉.htaccess
和nginx.conf
方法,但无法在Heroku上使用这种传统的配置方法。
Simone Carletti给出了利用Rails 2.x Metals的答案,但是我正在使用Rails 3,但这不兼容:
Redirect non-www requests to www URLs in Ruby on Rails
我不是在ApplicationController中寻找简单的before_filter
。我想完成一个类似于西蒙妮的重写。我认为至少这对于像Rack这样的Web服务器或中间件来说是一件好事,因此我想在实际的应用程序代码中忽略这一点。
redirect to status
----------------------------------------------------
www.foo.com foo.com 301
www.foo.com/whatever foo.com/whatever 301
与/^www\./
匹配的Only主机应重定向。其他所有请求都应忽略。
在Ruby on Rails 4]中,删除www。只需使用以下方法即可在保持路径名的同时从任何URL进行访问:
# config/routes.rb constraints subdomain: 'www' do get ':any', to: redirect(subdomain: nil, path: '/%{any}'), any: /.*/ end
相反,添加www。到尚无此URL的开头可以通过以下方法实现:
# config/routes.rb
constraints subdomain: false do
get ':any', to: redirect(subdomain: 'www', path: '/%{any}'), any: /.*/
end
如果您使用的是Rails 3,这是一种更好的方法。只是利用路由的出色功能。
我真的很喜欢使用Rails Router这样的东西。以前的答案很好,但是我想要一些通用的东西,我可以将其用于任何以“ www”开头的网址。
看看这个中间件,它应该完全按照您想要的方式工作:
Duke解决方案的单行版本。只需添加到routes.rb的顶部
在Rails 3中
如果要从顶级域(TLD)重定向到www子域,请使用此代码:
对于Rails 4,上述解决方案必须附加在Verb结构上,例如via: [:get, :post]
。杜克大学的解决方案成为:
上面的方法没什么问题,但是也有一些提供Rack中间件的工具可以做到这一点。