Поддерживать HTTP Referer - PullRequest
       23

Поддерживать HTTP Referer

3 голосов
/ 15 января 2010

Я настроил некоторые перенаправления на сервере Apache. Они выглядят так:

Redirect / Имя / регистрация /login.html

Мой вопрос такой ... есть ли способ сохранить HTTP Referrer с помощью этого перенаправления? Казалось бы, по умолчанию Apache отбрасывает информацию. Мне бы очень понравилось, если бы после завершения перенаправления реферер сказал:

http://the.orginalurl.com/Name/register

Кто-нибудь, если это вообще возможно? Если нет, то подумайте об альтернативе.

Большое спасибо, Neil

Ответы [ 5 ]

6 голосов
/ 15 января 2010

Redirect не сохранит реферер, потому что браузеру отправлено 301 и новый адрес для открытия. Из руководства :

Директива Redirect отображает старый URL-адрес в новый, запрашивая у клиента повторное получение ресурса в новом месте.

mod_rewrite и (я думаю) Псевдоним можно переписать напрямую (т. Е. Без перенаправления браузера) и сохранит реферер , С помощью mod_rewrite вы можете даже добавить реферер в качестве параметра GET к вашему запросу, если хотите.

1 голос
/ 01 ноября 2010

Я создал альтернативный способ передачи реферера через редирект 301.https://webmasters.stackexchange.com/questions/4665/

1 голос
/ 15 января 2010

Вы всегда можете сохранить исходный реферер в переменной конвейера в начале запроса и просто извлечь его оттуда.

1 голос
/ 15 января 2010

Это проблема браузера, а не apache. Вы ничего не можете с этим поделать. Это сделано для предотвращения определенных проблем с безопасностью и спама с помощью реферера.

http://en.wikipedia.org/wiki/HTTP_referrer#Referrer_hiding

0 голосов
/ 04 мая 2014

Полагаю, все зависит от того, как вы пишете правило. Он может действовать как «перенаправление» или «перезапись» в соответствии с указанными вами флагами.

1. Перенаправление

302 будет отправлено в браузер и инициирует другой запрос (см. Firebug с включенной опцией «сохраняться»):

RewriteCond %{REQUEST_URI} !/index.html
RewriteRule ^(.*)$ /index.html [R=302,L]

2. Перепишите

браузер не инициирует перенаправление 302, потому что мы не отправляем такой заголовок, но он будет маскировать содержимое:

RewriteCond %{REQUEST_URI} !/index.html
RewriteRule ^(.*)$ /index.html [L]

В этом варианте, если кто-то получит доступ к «page.html», он увидит содержимое «index.html», а не «page.html», но в приведенном выше URL-адресе будет отображаться «page.html»

Хорошо для страницы обслуживания и т. Д. ... не уверен насчет страниц входа в систему ... но это еще один вариант для размышления.

Основное различие между "RewriteRule" и "Alias" в моем конкретном случае заключается в том, что перезапись может быть установлена ​​внутри .htaccess, тогда как "Alias" нет ... поэтому не всегда вы можете использовать Alias ​​...

...