Совсем недавно на форуме был вопрос о том, Убрать из трафа реферер (или заменить) Решил выложить несколько способов, проверенных мною. Таки есть несколько способов. Самый простой вариант. Рефреш-мета в заголовке страницы с нулевым таймаутом. PHP: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="robots" content="noindex, nofollow"> <meta http-equiv="refresh" content="0; url='http://anwy.ru/ref.php'"> </head> </html> Фрейм Представляет собой редирект из фрейма. PHP: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <iframe src="javascript:parent.location='http://anwy.ru/ref.php'" style="visibility:hidden"> </iframe> <script> var x = 0 function go() { location.replace("http://anwy.ru/ref.php") } window.setTimeout('go()', 5000) </script> </body> </html> Сабмит формы Очень хитрый вариант с сабмитом пустой формы из фрейма. PHP: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <script> var x = 0 function go2() { location.replace("http://anwy.ru/ref.php") } function go() { if(x) return x += 1 try { var html = '<form target="_parent" action="http://ejz.ru/ref.php">' html += '<input type="hidden" name="u" value="" /></form>' window.frames[0].document.body.innerHTML = html window.frames[0].document.forms[0].submit() } catch(e) { go2() } } </script> <iframe onload="window.setTimeout('go()', 99)" src="about:blank" style="visibility:hidden"> </iframe> <script>window.setTimeout('go2()', 3333)</script> </body> </html> flash Редирект совершает флеш-объект (ссылка ему передается параметром). PHP: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <embed src="/r.swf?u=http%3A%2F%2Fanwy.ru%2Fref.php" width="1" height="1" type="application/x-shockwave-flash"> <script>window.setTimeout('location.replace("http://anwy.ru/ref.php")', 5000)</script> </embed> </body> </html> PS. Совсем недавно появился еще один способ от kaimi / DX На данный момент, наверное, самый универсальный. За что им спасибо. В различного рода работе (партнерки, лендинги и т.п.) нередко возникает вопрос - как переадресовать пользователя на другую веб-страницу, при этом чтобы его браузер не передавал HTTP Referer. В Интернете существует множество сервисов, которые просто заменяют Referer на свой собственный адрес, но это тоже не всегда желаемо. Так как же получить пустой Referer? Есть один самый надежный путь: 1. Переадресовываем пользователя на HTTPS-адрес. 2. Далее, если целевой адрес HTTP, то переадресовываем туда. 3. Иначе, переадресовываем на наш HTTP-адрес, а оттуда уже на целевой. Эта схема гарантированно очистит Referer, однако, она достаточно муторная и иногда требует нескольких редиректов. Если же у вас нет возможности организовывать такую схему, или вы просто не хотите слишком париться на этот счет, или даже просто интересуетесь, какие есть еще способы, то эта заметка для вас. Я расскажу, как получить максимально кроссбраузерное решение, которое переадресует пользователя на целевую страницу с пустым реферером. Разумеется, совершить редирект, отослав браузеру заголовок (с кодом 301 или 302, например) не получится, так как браузер в этом случае удержит реферер, но не обнулит его, и даже не изменит. Придется делать решение, совмещающее в себе различные подходы. Итак, сначала я приведу код, а потом - пояснения по нему. PHP: <?php //Ваша ссылка, на которую осуществляется редирект $target_link = 'http://google.com'; if(!isset($_SERVER['HTTP_REFERER'])) { //Если нам никто реферер не передал, то достаточно //просто совершить 301 редирект - браузер при этом реферера навешивать //не будет //Неплохо бы еще проверить, если у нас редирект с HTTPS на HTTP, то также //осуществляем 301 редирект через header(), так как браузер //в таком случае не передаст реферер, но эту простую задачку //я оставлю вам. header('Location: ' . $target_link, true, 301); exit(); } //А иначе всё не так просто $target_link = htmlspecialchars($target_link); //Будем делать редирект через тег <meta>. //Это срабатывает в Firefox и IE, однако, в других браузерах не работает. //В то же время, браузеры на движке WebKit //(Safari, Chrome, новая Opera) поддерживают //атрибут rel="noreferrer" у тегов <a> $is_webkit = isset($_SERVER['HTTP_USER_AGENT']) && strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'webkit') !== false; if($is_webkit) { //Ставим таймаут редиректа через тег <meta> в 3 секунды //(на тот случай, если в браузере выключен JavaScript). //Это, конечно, не удалит реферера, зато заменит его //на URL этого скрипта и переадресует пользователя //на целевую страницу. $meta_timeout = 3; //Пробуем осуществить редирект с помощью JavaScript. //(Это очищает Referer). $onload = 'onload="redirect();"'; } else { //Firefox и IE и так не шлют реферер при редиректе через //тег <meta>, поэтому нам не нужны извращения через JavaScript. $meta_timeout = 0; $onload = ''; } echo <<<HERE <!doctype html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="cache-control" content="max-age=0" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="expires" content="0" /> <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="refresh" content="$meta_timeout;url=$target_link"> <title></title> <script type="text/javascript"> <!-- var redirect = function() { document.getElementById("link").click(); } --> </script> </head> <body $onload> <a href="$target_link" rel="noreferrer" id="link"></a> </body> </html> HERE; Много комментариев дано прямо в коде, но я поясню поподробнее. В скрипте скомбинировано два разных подхода к переадресации в зависимости от браузера: 1. META-редирект. Хорошо работает в Firefox и IE, очищая поле Referer. 2. Редирект через JavaScript методом программного клика по ссылке с атрибутом rel="nofollow". Это работает в последних версиях браузеров, основанных на движке WebKit (Chrome, Safari, новая Opera). На случай, если JavaScript отключен, через 3 секунды будет осуществлен META-редирект. Это не очистит поле Referer в перечисленных браузерах, но, как минимум, заменит его и в любом случае осуществит переадресацию.