HTTP_REFERER
- это способ браузера сказать серверу, какую страницу посетил пользователь раньше. Он не указывает, с какой страницы был перенаправлен пользователь.
Взять, к примеру, рекламу на Stackoverflow здесь. Нажав на один из них, вы перейдете к длинному URL-адресу adzerk.net
, который записывает ваш клик, а затем перенаправляет вас на целевой URL-адрес. Промежуточная страница Adzerk сама по себе не является интересной страницей, и пользователь фактически никогда не видит ее, если не обращает пристального внимания на адресную строку. На самом деле там даже нет «страницы». Так что это не считается «посещением страницы». Следующая страница получит stackoverflow.com
в качестве реферера, промежуточная страница перенаправления не имеет значения.
Stackoverflow -> Adzerk redirect -> Some advertiser
HTTP_REFERER: stackoverflow.com
Также нет никакого реферера, если вы вводите адрес в адресную строку. Если вы используете Stackoverflow и вводите yahoo.com
в адресную строку, Yahoo не увидит ни одного рефери от вас. Если вы нажмете по ссылке, ведущей из Stackoverflow в Yahoo, браузер отправит реферера.
В вашем случае, если вы напрямую получаете доступ к защищенному действию, набирая его в адресной строке и перенаправляясь, просто не будет предыдущей страницы, с которой вы пришли.
Согласно комментариям, здесь, как вставить данные в URL при перенаправлении:
AppController extends Controller {
function redirect($url, $status = null, $exit = true) {
if (is_array($url)) {
$url['?'] = 'redirect=true';
} else {
$url.= '?redirect=true';
}
return parent::redirect($url, $status, $exit);
}
}