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

Как сделать перенаправление Apache 301, чтобы сохранить реферер?

У меня есть перенаправление Apache 301 в моем файле httpd.conf, который перенаправляет весь трафик в один домен для целей канонизации. Недавно я заметил, что это перенаправление не сохраняет реферер в заголовках. RFC2616 похоже, указывает на то, что сохранение реферера не является обязательным при перенаправлении и фактически не рекомендует его при переходе между HTTP и HTTPS.

Хотя я нашла и другие вопросы в котором простое перенаправление Apache 301 сохраняет реферер, и, как правило, это так по умолчанию. Какие еще факторы могут повлиять на это поведение, с которыми я могу поиграть, чтобы сохранить реферера? Основаны ли единственные факторы на версии сервера Apache и / или настройках браузера клиента (IE. Вне моего контроля)?

Моя редирект:

ServerAlias www.example.com sub1.example.com   

## Redirect all sub-domains to www
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

Что касается приведенного выше правила перезаписи, я посещаю http://sub1.example.com. В настоящее время я просто работаю с HTTP для простоты, пока не смогу в этом разобраться.

Я определяю, что реферер не переносится, путем посещения перенаправленного сайта вручную через браузер с открытыми инструментами разработчика. Я также определил, что реферер не включен в PHP $_SERVER global на принимающей странице. Я могу подтвердить, что происходит только одно перенаправление. Серверный язык - PHP.

Вот заголовок запроса для начальной страницы (sub1.example.com):

GET / HTTP/1.1
Host: sub1.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

Вот заголовок ответа для начальной страницы (sub1.example.com):

HTTP/1.1 301 Moved Permanently
Date: Wed, 04 Oct 2017 18:14:34 GMT
Server: Apache
Upgrade-Insecure-Requests: 0
Location: http://www.example.com/
Cache-Control: max-age=1
Expires: Wed, 04 Oct 2017 18:14:35 GMT
Content-Length: 243
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

Вот заголовок запроса для принимающей страницы (www.example.com):

GET / HTTP/1.1
Host: www.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: <redacted>

Заголовок ответа для принимающей страницы (www.example.com):

HTTP/1.1 200 OK
Date: Wed, 04 Oct 2017 18:14:34 GMT
Server: Apache
Upgrade-Insecure-Requests: 0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

Перенаправление, 301 или иное, отправляет ответ обратно клиенту (браузеру пользователя), который просто говорит: «отправьте запрос еще раз, но на этот раз используйте foo.com. "Если клиент решает отправить еще раз, то он это делает, и то, как он формулирует запрос, полностью зависит от клиента. Поскольку на стороне сервера нет никаких действий, вы не можете повлиять на включение реферера.