Проблемы HSTS при перенаправлении на www. поддомен

Я пытаюсь настроить HSTS для своего веб-сайта, но сталкиваюсь с некоторыми проблемами, касающимися HSTS и использования www. поддомен. Я бы хотел, чтобы весь трафик HTTP и HTTPS перенаправлялся на https://www.example.co.uk .

Я использовал информацию на следующих веб-сайтах в качестве руководства: https://www.danielmorell.com/blog/how-to-configure-hsts-on-www-and-other-subdomains

Примеры на указанных выше веб-сайтах демонстрируют строгую транспортную безопасность (STS) заголовок на всех этапах перенаправления.

Например. http://example.com 301 перенаправляет на https://example.com (STS в заголовке). Затем https://example.com перенаправляет на https://www.example.com (STS в заголовке).

Однако когда я пробую свой собственный домен, я получаю только заголовок STS при первоначальном перенаправлении, а не при следующем перенаправлении на https: // www. субдомен.

Примеры из моего собственного тестирования: с

  1. http://example.co.uk (301) по https://example.co.uk (STS в заголовке ) (301) по https://www.example.co.uk (в заголовке нет STS).

  2. http://www.example.co.uk (301) по https://www.example.co.uk (без STS в заголовке).

  3. https://example.co.uk (STS в заголовке), затем с (301) на https://www.example.co.uk (без STS в заголовке).

  4. https://www.example.co.uk (без STS в заголовке).

Ниже представлена ​​копия ответа заголовка с использованием варианта 1 выше:

http://example.co.uk

HTTP/1.1 301 Moved Permanently
Date: Mon, 04 Feb 2019 18:14:30 GMT
Server: Apache
Location: `https://example.co.uk`/
Content-Length: 237
Content-Type: text/html; charset=iso-8859-1

https://example.co.uk /

HTTP/1.1 301 Moved Permanently
Date: Mon, 04 Feb 2019 18:14:33 GMT
Server: Apache
Strict-Transport-Security: max-age=31557600; includeSubDomains;
Location: https://www.example.co.uk/
Content-Length: 241
Content-Type: text/html; charset=iso-8859-1

https: // www. example.co.uk/

HTTP/1.1 200 OK
Date: Mon, 04 Feb 2019 18:14:35 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=fkjqaomopnp03uforuptdu3u17; path=/
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1

Мой веб-сайт работает на общем сервере Apache. У меня есть действующий сертификат Let's encrypt с CN = example.co.uk .

Я пробовал предложения по адресу: https://webmasters.stackexchange.com/questions/115125/hsts-implementation-when-using-www-tld , но, похоже, это не помогло мне проблема.

Мой .htaccess показан ниже:

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

## Base Redirects ##

# Turn on Rewrite Engine
RewriteEngine On

# Redirect to secure HTTPS before changing host
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteCond %{https} off  
RewriteRule ^(.*)$ https://example.co.uk/$1 [R=301,L]

# Remove trailing slash from non-filepath urls
RewriteCond %{REQUEST_URI} /(.+)/$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ https://www.example.co.uk/%1 [R=301,L]

# Include trailing slash on directory 
RewriteCond %{REQUEST_URI} !(.+)/$
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ https://www.example.co.uk/$1/ [R=301,L]

# Force HTTPS and WWW 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [OR,NC]
RewriteCond %{https} off  
RewriteRule ^(.*)$ https://www.example.co.uk/$1 [R=301,L]

Я пробовал пару других своих поддоменов, и все они отправляют STS в своем ответе.

Таким образом, проблема, похоже, связана с https: / /www. субдомен, несмотря на наличие директивы includeSubDomains , и я не понимаю, почему и как заставить ее работать. Может быть проблема с настройками сервера, если да, какие настройки следует проверить?

1
задан 6 February 2019 в 21:43
1 ответ

ഉത്തരം ഈ ഉത്തരത്തിൽ നിന്ന് ഭാഗികമാണ്.

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

# Only set HSTS header if protocol is HTTPS
<if "%{HTTPS} == 'on'">
        Header always set Strict-Transport-Security "max-age=31557600; includeSubDomains;"
</if>

# Remove trailing slash from non-filepath urls
RewriteCond %{REQUEST_URI} /(.+)/$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ https://www.example.co.uk/%1 [R=301,L]

# Include trailing slash on directory 
RewriteCond %{REQUEST_URI} !(.+)/$
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ https://www.example.co.uk/$1/ [R=301,L]

ഇത് പ്രവർത്തിക്കണം. ഞാൻ ഇത് പരീക്ഷിച്ചു.

1
ответ дан 3 December 2019 в 23:07

Теги

Похожие вопросы