301 перенаправляет в WWW с заголовком предварительной загрузки HSTS

Я собираюсь предварительно загрузить сайт 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, мне мало поможет.

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


person carmi    schedule 15.03.2019    source источник


Ответы (2)


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

Вот мои рабочие инструкции. Во-первых, весь трафик перенаправляется на 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]
person carmi    schedule 17.03.2019
comment
Это правильный вариант, как указано на hstspreload.org. На home.pl удалите ‹if› обертку, то же самое, если нет заголовка видно. Убедитесь, что это происходит до любого другого перенаправления. Если добавлен второй, используйте его только как один. - person Patryk Padus; 04.09.2020

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

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

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

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

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

person Barry Pollard    schedule 15.03.2019
comment
Спасибо, Барри! К сожалению, результат был тот же. Тем не менее, я думаю, что я ближе. Я прочитал кое-что, потому что вы сообщили мне об атрибуте always. Это обязательно потребуется как часть решения. - person carmi; 16.03.2019
comment
Вы определенно устанавливаете заголовок перед перенаправлением, а не после? Я обновил свой ответ альтернативным (и IMHO лучше) способом установки этого. - person Barry Pollard; 16.03.2019
comment
У меня есть заголовок в качестве первой инструкции в моем файле htaccess перед RewriteEngine On для перенаправления. На ваш взгляд, заголовок, похоже, устанавливается после перенаправления. Я использую управляемый хост и не имею доступа к виртуальному хосту SSL. Я спрошу. Еще раз спасибо, Барри! - person carmi; 17.03.2019