我有一个托管在 Heroku 上的 Rails 2.3.2 应用程序。
裸域和 www 子域是几年前添加的,它们都对搜索引擎具有一定的权限。
但是问题是搜索引擎将内容视为重复,因此我想做从裸域到 www 子域的 301 重定向。
我已经问过 Zerigo DNS 是否可以通过他们的平台执行此操作,他们说不可以,我必须在 Heroku 这边执行此操作。Heroku 不允许访问服务器,因此我需要一些 Rack 中间件来执行此操作。
根据这个答案here gem rack-rewrite 可以做到这一点。
但是,我真的是一个 NOOB,我不知道如何设置它,以便裸域中的任何 url 都将被 301 重定向到 www 子域。
例子:
example.com/products/12 => www.example.com/products/12
我目前在应用程序控制器中做错事,如下所示:
before_filter :ensure_domain
protected
def ensure_domain
app_domain = "www.example.com"
naked_domain = "example.com"
page_path = request.fullpath
if request.env['HTTP_HOST'] == naked_domain && RAILS_ENV == 'production'
#HTTP 301 is a permanent redirect
redirect_to "http://#{app_domain}#{page_path}", :status => 301
end
end
这行得通,但我知道我应该在机架中间件中这样做。
有人可以告诉我如何使用 rack-rewrite gem 进行设置吗?
我已将以下内容添加到我的 application_controller.rb 文件中:
config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
r301 %r{.*}, 'http://www.example.com$&', :if => Proc.new {|rack_env|
rack_env['SERVER_NAME'] != 'www.example.com'
}
end
这会产生以下错误:
NameError(ApplicationController:Class 的未定义局部变量或方法“config”):
关于如何使此设置正常工作的任何想法?