过滤第二级和第三级主机请求

时间:2016-03-06 08:07:32

标签: regex ruby-on-rails-4

在rails应用程序中,主机请求需要在第二级或第三级域请求上进行过滤。

目前,我可以使用前两个语句中的一个过滤,但不能同时使用以下正则表达式

@site ||= if match = request.host.match(/.*?([^.]+\.[^.]+$)/)
@site ||= if match = request.host.match(/.*?([^.]+\.[^.]+\.[^.]+$)/)
  domain = match[1]
  Site.find_by_host(domain)

如何正确处理第二级或第三级请求?

1 个答案:

答案 0 :(得分:1)

好吧,如果你想捕获二级和三级域并拒绝其他所有域,你可以试试这个正则表达式:

/(?i)((?<=\s|^)(?:[a-z0-9\-]+\.){1,2}[a-z0-9]+)(?=(?:[\s\/:])|$)/

查看rubular.com

的实时演示

输入:

google.com facebook.com
docs.google.com
search.google.com/list
www.microsoft.com
foo.bar.google.com

输出:

google.com facebook.com     | match
docs.google.com             | match
search.google.com/list      | match
www.microsoft.com           | match
foo.bar.google.com          | no match