ruby-on-rails - 如何使用 Rails 3/Rack 在没有 www 的情况下重定向?

标签 ruby-on-rails redirect ruby-on-rails-3 seo rack

我知道有很多问题可以回答这个问题。我熟悉 .htaccessnginx.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/

相关文章:

ruby-on-rails - 在代理后面的 Ubuntu 上安装 Rails

ruby-on-rails - 添加自定义参数以设计注册 - 未经许可的参数

sql - 使用 ILIKE 查询 Rails

apache - 重定向,除非 URL 以特定字符串开头

rubygems - 奇怪的 bundler 错误: `initialize'中的tar_input.rb:49:不是 bundle 上的gzip格式(Zlib::GzipFile::Error)

javascript - 为什么在重定向之前运行警报?

amazon-web-services - IIS 强制 https 重定向导致 503 错误

ruby-on-rails - rails 3 : How to format a Date in other than English languages?

ruby-on-rails - 索引 ElasticSearch 中某个方法的结果(Tire + ActiveRecord)

ruby-on-rails - 使用 Paperclip gem 验证上传时的附件内容