Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 阻止对html请求的子域访问_Ruby On Rails_Ruby On Rails 3_Routes - Fatal编程技术网

Ruby on rails 阻止对html请求的子域访问

Ruby on rails 阻止对html请求的子域访问,ruby-on-rails,ruby-on-rails-3,routes,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' =>

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

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

因此,听起来您想要反转路由中的逻辑-您想要约束大部分路由,以便它们仅在子域不等于widget时解析。这与上面的示例相反,在上面的示例中,您只在“widgets”子域上提供一条路由。这很简单

在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上解析