【问题标题】:Redirect to a new domain, same path重定向到新域,相同路径
【发布时间】:2014-04-22 17:27:06
【问题描述】:

我正在尝试确保我的应用程序控制器 (Rails 3.2) 的 before_filter 中有一个规范域。如果 GET 请求来自受支持的域,而不是规范域,那么我们应该重定向到确切的某些路径和协议,但在换出的域上。

before_filter :ensure_correct_domain
def ensure_correct_domain
  if Rails.env.production? && request.get? && request.host != Settings.domain
    redirect_to host: Settings.domain
  end
end

这段代码大部分都有效,但我发现它在格式化路径上失败了。以下是发生的事情:

很遗憾,我丢失了扩展名,我不知道为什么。我还担心还有更多我没有偶然发现的边缘情况。

我怎样才能干净地替换当前请求的 URL only 的 URI 的主机并让它在 所有 情况下工作?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    当您将哈希传递给redirect_to 时,它会使用该哈希调用url_for。看起来您需要将 format: "xml" (或其他)添加到格式化路径的哈希中。一个可能更简洁(相对而言)的替代方法是简单地使用规范域构造一个 URL,并使用该字符串发出一个redirect_to。如果该字符串以协议开头,则无需进一步处理即可使用该字符串。

    从 3.2 开始,我认为这应该可以工作,但我还没有测试过。

    if Rails.env.production? && request.get? && request.host != Settings.domain
      redirect_to "#{request.protocol}#{Settings.domain}#{request.fullpath}"
    end
    

    【讨论】:

    • 谢谢,这看起来很棒,因为它避免了解析重构路径。
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2014-04-27
    相关资源
    最近更新 更多