rack-rewrite将所有子域重定向到根域(root除外)

时间:2012-11-15 13:39:33

标签: ruby-on-rails ruby rack-rewrite

这是怎么做的:

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

使用rack-rewrite语法?

1 个答案:

答案 0 :(得分:2)

您可以为此

创建新的中间件
class SubdomainToWwwMiddleware
  def initialize(app)
    @app = app
  end

  def call(env)
    request = Rack::Request.new(env)
    if !request.host.starts_with?("www.")
      [301, { "Location" => request.url.gsub(/\/\/([^\.]*)/, "//www") }, self]
    else
      @app.call(env)
    end
  end
end

这是未经测试但应该让你朝着正确的方向前进。您可能希望添加一个条件,不仅可以检查www.example.com,还可以检查example.com。在这种情况下,上面的中间件可能会爆炸。

您可以将其放入/lib/middleware/subdomain_to_www_middleware.rb,添加

config.autoload_paths += %W( #{ config.root }/lib/middleware )

到您的config/application.config

config.middleware.use "SubdomainToWwwMiddleware"

config/environments/production.rb