301 перенаправляет в WWW с заголовком предварительной загрузки HSTS - PullRequest
0 голосов
/ 15 марта 2019

Я намерен предварительно загрузить сайт HSTS и увидеть следующий заголовок. Нет проблем. Это работает.

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

Условием предварительной загрузки HSTS является то, что я также перенаправляю весь HTTP-трафик на HTTPS. Для этого я использую следующую инструкцию:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Это тоже работает. Если он проверит мой корневой домен (example.com) по адресу hstspreload.org , я вижу зеленый и могу добавить свой домен в список предварительной загрузки. Это здорово, с одной оговоркой.

Я хочу загрузить свой сайт на https://www.example.com, а не https://example.com. Это должно быть достаточно простым:

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

Если вернуться к hstspreload.org , я получу следующую ошибку:

Ошибка ответа: в ответе отсутствует заголовок HSTS.

Когда я вписываю любой поддомен в строку hstspreload.org , я вижу зеленый. Это только в корневом домене, где я получаю ошибку, потому что, кажется, корневой домен больше не отправляет заголовок HSTS. Однако условием предварительной загрузки является то, что корневой домен должен отправлять заголовок.

Я сделал домашнее задание и искал. Я прочитал это сообщение пару лет назад, но мой вопрос не о SEO. И два перенаправления - одно с HTTP на HTTPS, а другое - на - все в порядке с Google.

Я достаточно уверен, что у меня может быть предзагрузка HSTS и перенаправление WWW. Troyhunt.com перенаправляет на HTTPS, а затем на WWW. Корневой домен также проверяется на hstspreload.org . Тем не менее, я полагаю, что он использует IIS, поэтому вопрос о том, что он делает на Apache, мало чем мне поможет.

Буду благодарен за любые идеи. Я пытаюсь, но я немного новичок. Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Понял!Все ваши отзывы были точными.Я бы никогда не получил это.СПАСИБО, Барри !!!

Вот мои рабочие инструкции.Во-первых, весь трафик перенаправляется на HTTPS.Затем, если соединение HTTPS, отправляется заголовок HSTS.Как вы и предполагали, env=HTTPS был не совсем правильным подходом.Затем происходит перенаправление на WWW.

RewriteEngine On

# Redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

<If "%{HTTPS} == 'on'">
 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</If>

# Redirect to WWW
RewriteCond %{HTTPS} off [OR,NC]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
0 голосов
/ 16 марта 2019

Чтобы включить заголовки в перенаправления, вам нужно добавить атрибут always:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

Я также не уверен, когда установлен env=HTTPS - он может быть установлен после того, как перенаправление произойдет, так что выше будетне работает?

Если честно, я обычно помещаю настройку HSTS в SSL vhost, чтобы она применялась только к HTTPS-соединениям, а не пыталась стать умнее, используя env=HTTPS.

Если у вас несколькоТогда SSL vhosts позволяет вам иметь другой HSTS - например, не иметь includeSubDomains в базовом домене, но иметь его в домене www.Это полезно, если вы еще не перенесли домены, отличные от www, в HTTPS.Однако для предварительной загрузки вы должны иметь includeSubDomains как на базовом домене, так и на домене www, так что это, вероятно, не относится к вам.

...