【问题标题】:301 Redirect Rails 4 always goes to home page301 重定向 Rails 4 总是转到主页
【发布时间】:2015-06-20 21:15:02
【问题描述】:

在我的 Rails 4 应用程序中,在应用程序控制器内部实现重定向。

我已经让它在主页上工作,所以foo.com 将重定向到www.foo.com,但是,如果我输入网址foo.com/about,它只会重定向回主页www.foo.com

这是我正在使用的代码(application_controller.rb):

before_filter :add_www_subdomain

def add_www_subdomain
  unless /^www/.match(request.host)
  redirect_to("#{request.protocol}www.#{request.host_with_port}",
              :status => 301)
  end
end

找不到专门针对 Rails 的文档 4. 解决此问题的最佳方法是什么?我希望foo.com/about 重定向到www.foo.com/about

【问题讨论】:

  • 在应用程序级别执行这种规范的域名重定向有点不寻常。如果您的应用程序前面有一个服务器,例如 Apache 或 nginx,您可以在那里进行重定向。这也可以通过 DNS 记录来处理 - 检查 CNAME 记录。
  • 按照我的方式做这件事有什么并发症吗?我使用 DNSimple,但是,当我使用 https 时它们无法重定向
  • 似乎应该可以正常工作。绝对比在较早的层(例如 nginx、DNS)中捕获它要慢一些,但这对于这种重定向来说根本不是什么大问题。只是想在您采用这种方式之前我会提出这一点:-)
  • 太棒了,非常感谢。

标签: ruby-on-rails ruby ruby-on-rails-4 redirect controller


【解决方案1】:

#host_with_port 替换为#fullpath 即可。

before_filter :add_www_subdomain

def add_www_subdomain
  unless /^www/.match(request.host)
    redirect_to("#{request.protocol}www.#{request.fullpath}", status: 301)
  end
end

【讨论】:

  • 您能否编辑答案并包含应使用的代码。它目前正在返回https://foo.comwww.foo.com/about
  • 这不起作用它只会返回 www..com 我一直在试图解决这个问题。任何建议都会很棒。
【解决方案2】:

最终在应用程序控制器中进行了这样的设置:

private

def add_www_subdomain
  unless request.host == 'www.foo.com'
    redirect_to 'https://www.foo' + request.fullpath
  end
end

并调用前置过滤器:

before_filter :add_www_subdomain

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 2017-08-07
    • 1970-01-01
    • 2020-01-09
    • 2017-09-04
    • 2018-12-29
    • 1970-01-01
    相关资源
    最近更新 更多