1

我需要能够将非 www 重写为 www 但不是在存在(非 www)子域的情况下。

所以 example.com 到-> www.example.com 但 sub.example.com 仍然是 sub.example.com

我在 rails 3 中,这似乎应该使用 Rack Middleware 来完成,但问题是这是一个多租户应用程序,因此 TLD 可能是任何域。

这是我到目前为止的位置:

  Class Www

  def initialize(app)
    @app = app
  end

  def call(env)

    request = Rack::Request.new(env)

    if !request.host.starts_with?("www.")
      [301, {"Location" => request.url.sub("//","//www.")}, self]
    else
      @app.call(env)
    end

  end

  def each(&block)
  end

end

任何指针将不胜感激....

4

1 回答 1

1

您现在拥有的代码将重写“sub.example.com”,您的call函数可以这样重写:

def call(env)
  request = Rack::Request.new(env)

  # Redirect only if the host is a naked TLD
  if request.host =~ /^[^.]+\.[^.]+$/
    [301, {"Location" => request.url.sub("//","//www.")}, self]
  else
    @app.call(env)
  end
end
于 2012-09-09T10:48:54.993 回答