我知道有很多问题可以回答这个问题。我熟悉 .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
。我想完成类似于 Simone 的重写。我相信这至少是网络服务器或像 Rack 这样的中间件的工作,所以我想在实际的应用程序代码中忽略这一点。
目标
redirect to status
----------------------------------------------------
www.foo.com foo.com 301
www.foo.com/whatever foo.com/whatever 301
只有 匹配/^www\./
的主机应该被重定向。应忽略所有其他请求。
最佳答案
在 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
关于ruby-on-rails - 如何使用 Rails 3/Rack 在没有 www 的情况下重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046960/