【发布时间】:2012-09-08 01:21:07
【问题描述】:
我需要能够将非 www 重写为 www,但在存在(非 www)子域的情况下则不需要。
so example.com to-> www.example.com 但 sub.example.com 仍然是 sub.example.com
我在 rails 3 中,这似乎应该使用机架中间件来完成,但问题是这是一个多租户应用程序,因此 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
任何指针将不胜感激......
【问题讨论】:
-
你能在网络服务器中处理它而不是通过导轨或机架吗? Apache 或 Nginx 等有能力做到这一点。
-
我在 Heroku,所以无法访问。
-
我不会在 heroku 上拥有您的网站。 Heroku 将有停机时间(即使很小),当您的应用程序停机时,客户将前往您的网站寻求支持。如果两个都下线那就不好了。此外,您不希望扰乱您的应用程序的用户来更新您的网站。我会将您的网站放在其他服务上(即 Linode),并将根域和 www 指向该服务,然后将所有其他 *.subdomain.com 请求发送到 heroku。您可以在您的 dns 中执行此操作。然后在您的网站服务器上使用 nginx 或其他任何东西进行重定向。
-
这还可以让您将您的网站和应用程序的代码分开,以防您想让某人在您的网站上工作而不获取您的应用程序的代码。我也不知道为什么我的答案被转换为评论......这是解决 OPs 问题的答案,即使没有直接回答所述问题。
标签: ruby-on-rails rack rack-middleware