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


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.