在Rails中检测外部URL的最佳方法是什么?

4
什么是在Rails中检测外部URL的最佳方法?
def external?(url)
 return true if url is external
end
3个回答

3

这里没有任何验证或其他操作。如果url包含根网址,那么它只会返回true。

is_external_url?(url)
  true unless url.include?(root_url)
end

1
从概念上讲,这是一个好主意。然而,通常情况下,root_url 指向的是类似于 www.mydomain.com/index.html 的东西。你会如何处理呢? - Rajesh Kolappakam
嗯,root_url几乎总是指向站点的根URL。另一种方法可能是手动添加字符串或在不同环境中使用yaml设置,代替上面的root_url。 - DavidVII

0
def get_host_name(url)
  url = "http://#{url}" if URI.parse(url).scheme.nil?
  URI.parse(url).host.downcase
end

def is_external_url?(url)
  host = get_host_name(url)
  host != 'www.mydomain.com'
end

-1
如果您无法访问当前域,则请检查路径是否被当前应用程序识别。
def external?(url)
  !!(Rails.application.routes.recognize_path(URI.parse(url).path) rescue false)
end

如果外部URL的路径恰好与您网站上定义的路径匹配,则会返回错误的结果。 - Adam Fabicki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接