Как получить путь реферера запроса?

83

Мне нужен путь реферера. Мне не нужно доменное имя. Например, если реферер - это http://www.google.com/adsenseя хочу /adsense.

рельсы101
источник

Ответы:

139

request.refererвозвращает строку, но вы можете использовать модуль URI Ruby, чтобы обернуть ее, а затем просто запросить ее путь:

if URI(request.referer).path == '/adsense'
Чадох
источник
4
Я использую эту строку URI (request.referer) и продолжаю получать ошибку URI :: InvalidURIError: bad URI (is not URI?). есть идеи, что это может быть?
kateray
Трудно сказать, что это могло быть без дополнительной информации. Попробуйте напечатать только request.refererв журналах, чтобы понять, почему он может не понравиться Ruby. (PS: Вы можете задать свой вопрос как отдельный вопрос, а не как комментарий к ответу на другой вопрос. :-))
chadoh
1
Прочтите этот вопрос, чтобы узнать о нем больше URI::InvalidURIError.
Джеймс Шевалье
Как ни странно, реферер может быть недопустимым URI, даже если он не пустой. Я обнаружил это с помощью реферера, содержащего '|', который вызвал URI :: InvalidURIError. Я помещаю URI.Parse в блок begin / rescue / end.
tomf
27

Вы можете получить доступ к рефереру с помощью

request.referer
Адриан Серафин
источник
3
Но реферер дает полный URL. мне нужен путь
rails101
2
Спасибо за полезную ссылку, @Fivell. Я добавил ответ с информацией из него в саму эту ветку, чтобы будущие посетители не страдали от гниения ссылок.
chadoh