Назад | Перейти на главную страницу

Как установить http_referrer в перенаправлении htaccess?

У меня есть новый домен для моего сайта, и я хочу перенаправить пользователя на этот новый сайт. Поэтому я установил простое перенаправление в моем файле .htaccess, например, у меня есть новый домен для моего сайта и я хочу перенаправить пользователя на этот новый сайт. Поэтому я установил простое перенаправление в моем файле .htaccess, например:

   RewriteCond %{REQUEST_URI} (.*)
   RewriteCond %{HTTP_HOST} ^www.oldsite.com$
   RewriteRule ^(.*)$ https://www.newsite.com%{REQUEST_URI} [L,R=301]

Пока это работает, но теперь мне нужно проверить, использует ли пользователь старый домен, и поэтому мне нужно проверить http_referrer в моем приложении php. К сожалению, http_referrer не установлен? Как я могу указать моему .htaccess, что http_referrer должен быть указан на www.oldsite.com, если срабатывает RewriteCond?

tl; dr Чтобы проверить, есть ли oldsite.com все еще запрашивается, вам следует проверить журналы доступа к серверу. (Ведите отдельный журнал только для oldsite.com.)


Как я могу указать своему .htaccess, что http_referrer должен быть www.oldsite.com

Вы не можете. В Referer HTTP запрос заголовок задается User-Agent / браузером. И сам редирект не является реферером.

Например:

  1. Если вы напечатаете oldsite.com прямо в браузер (прямой запрос, т.е. нет Referer заголовок установлен) тогда oldsite.com выдает перенаправление на newsite.com тогда исходный "без реферера" сохраняется и нет Referer заголовок отправлен.

  2. Если вы нажмете ссылку на oldsite.com из example.com затем example.com установлен как Referer (в браузере). Если oldsite.com затем выдает 301 редирект на newsite.com затем example.com является по-прежнему реферер, и он сохраняется браузером. Сайт-посредник, который выдает перенаправление, эффективно скрытый с целевого сайта.

Обратите внимание, что если Referer заголовки устанавливаются (и то, что они установлены) также зависит от любой политики реферера, которая может быть установлена ​​на исходном сайте (а также от любых настроек клиента, которые могут быть у пользователя). Политика реферера также охватывает переход от HTTP к HTTPS и т. Д. (Который не отправляет Referer по умолчанию).

ОБНОВИТЬ: Мне нужно «отреагировать» на это. Например, покажите пользователю сообщение типа «Эй, вы используете старый URL, пожалуйста, переключитесь на новый».

Возможно, вы могли бы добавить безобидный параметр URL-адреса как часть перенаправления и проверить это в принимающем сценарии. Однако при этом раскрывается этот параметр URL, который вам нужно будет убедиться, что он не улавливается поисковыми системами и т. Д., Чтобы не мешать поисковой оптимизации (т. Е. Установить соответствующий rel="canonical" и / или выполнить вторичное перенаправление для удаления параметра URL - после того, как вы зарегистрируете запрос).

Например:

RewriteCond %{HTTP_HOST} ^www\.oldsite\.com [NC]
RewriteRule ^ https://www.newsite.com%{REQUEST_URI}?redirect=1 [QSA,R=301,L]

(Первое условие, которое проверялось REQUEST_URI ничего не делал.)

В newsite.com/.htaccess вы можете сделать что-то вроде следующего, чтобы удалить параметр URL (это можно упростить, если у вас нет других параметров URL). Однако вы можете не захотеть выполнять это перенаправление (или, возможно, «отложить его» или «установить cookie»), если вы хотите отображать сообщение для пользователя.

# Remove "redirect=1" URL parameter if present
RewriteCond %{QUERY_STRING} ^redirect=1(?:&(.*))?
RewriteRule ^ %{REQUEST_URI}?%1 [R=301,L]