防止html请求的子域访问

时间:2013-11-20 06:03:43

标签: ruby-on-rails ruby-on-rails-3 routes

我有一个子域名widgets.mywebsite.com。子域唯一做的就是返回给定路由上的json。如何防止人/爬虫通过子域访问我的网站,同时仍保持路由可用?我很乐意将包含此子域的任何请求重定向到mywebsite.com,但无法确定如何执行此操作。

constraints :subdomain => 'widgets' do
  namespace :widgets, :path => nil, :format => 'json' do
    match 'v1' => 'v1/widgets#index'
  end
end

1 个答案:

答案 0 :(得分:3)

所以听起来你想要改变你的路线中的逻辑 - 你想要约束你的大部分路线,这样它们只能在子域不等于小部件时解决。这与上面的示例相反,您只在“窗口小部件”子域上创建单个路径。这非常简单。

在config / routes.rb中,您可以在Application.routes.draw

之前定义一个类
class NotWidgetsRequest
  def matches?(request)
    request.subdomain != 'widgets'
  end
end

然后你可以在

中包装v1 / widgets #index路由以外的所有路由
constraints NotWidgetRequest.new do 
  ...
end

块。这将阻止这些路由在widgets.mywebsite.com

上解析