HSTS и перенаправление - PullRequest
       22

HSTS и перенаправление

0 голосов
/ 08 сентября 2018

Я тестировал свой сайт здесь https://hstspreload.org и получил эту ошибку:

Ошибка: HTTP перенаправляет на www сначала

http://example (HTTP) следует немедленно перенаправить на https://example (HTTPS) перед добавлением субдомена www. Прямо сейчас первый редирект https://www.example. Требуется дополнительная переадресация что любой браузер, который поддерживает HSTS, будет записывать запись HSTS для домен верхнего уровня, а не только поддомен.

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

  1. http://example (это то, что пользователь вводит в адресной строке)
  2. https://example (первое перенаправление на HTTPS)
  3. https://www.example (второе перенаправление на поддомен www)

На данный момент это мой htaccess код, вызывающий перенаправление:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Возможно / желательно вставить сюда еще один редирект? Есть ли риски?

Любой комментарий / совет / предложение / гнилой помидор приветствуется: -)

1 Ответ

0 голосов
/ 11 сентября 2018

Сводка комментариев:

  • Конфигурация в httpd.conf и .htaccess читается сверху вниз.
  • Для RewritRules они применяются последовательно сверху вниз, пока не дойдут до последнего. Применяются все правила, соответствующие условию.
  • Чтобы предотвратить это, вы можете добавить тег [L] в RewriteRule. Этот тег сообщает Apache, что это последнее правило, которое будет применено, если оно соответствует условиям. Все дальнейшие правила игнорируются для этого запроса.

Последовательность переписывается здесь:

  1. клиент запрашивает http://example.com
  2. RewriteRule перенаправляет клиента на https://example.com
  3. Клиент возвращается с https://example.com
  4. Второй RewriteRule перенаправляет клиента на https://www.example.com
  5. Клиент возвращается с https://www.example.com
  6. Переписывание не применяется, Apache отвечает на запрос.

Почему это так? Он охватывает все случаи. Если первый запрос клиента уже https://example.com, описанный выше сценарий начнется с шага 4.

Пример конфигурации может выглядеть следующим образом:

Listen *:80
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    [... OTHER CONFIGURATION ...]
</VirtualHost>

Listen *:443
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com

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

    [... OTHER CONFIGURATION ...]
</VirtualHost>
...