重定向到新域,相同路径

时间:2014-04-22 17:27:07

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

我正在尝试确保应用程序控制器before_filter中的规范域(Rails 3.2)。如果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的的主机并使其在所有案例中工作?

1 个答案:

答案 0 :(得分:2)

当您将哈希值传递给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