URI имеет несколько методов, которые позволяют легко увидеть, просматриваете ли вы локальный URL-адрес или один на другом сайте.
Это небольшая модификация из примера документа URI .route_to ():
require 'uri'
URI.parse('/main.rbx?page=1').host # => nil
URI.parse('main.rbx?page=1').host # => nil
Внутренние URL не имеют хоста, поэтому я бы проанализировал соответствующие URL и посмотрел, есть ли у них хост. Если нет, то это внутренняя часть сайта.
URL-адрес, указывающий на внешний сайт, вернет значение для хоста, но также и полный URL-адрес для рассматриваемого сайта, поэтому вам нужно сделать еще несколько сообщений.
uri = URI.parse('http://my.example.com')
uri.route_to('http://my.example.com/main.rbx?page=1').host # => nil
uri.route_to('http://another.com/main.rbx?page=1').host # => "another.com"
Если у него есть хост, посмотрите, соответствует ли этот хост хосту вашего начального URL. Это можно сделать с помощью поиска по подстроке или совпадения с регулярным выражением, но оба из них могут возвращать ложные срабатывания в случае совпадения подстроки.
Вместо этого я бы использовал методы URI, чтобы избежать ложных срабатываний; Используйте route_to (), чтобы попытаться построить относительный путь к URL. Если результат имеет значение .host, то он внешний.