我需要能够将非www重写为www但不存在(非www)子域存在的情况。
所以example.com to-> 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
任何指针都会受到赞赏....
答案 0 :(得分: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