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


83

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

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.