Я пытаюсь настроить 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.
субдомен.
Примеры из моего собственного тестирования: с
http://example.co.uk
(301) по https://example.co.uk
(STS в заголовке ) (301) по https://www.example.co.uk
(в заголовке нет STS).
http://www.example.co.uk
(301) по https://www.example.co.uk
(без STS в заголовке).
https://example.co.uk
(STS в заголовке), затем с (301) на https://www.example.co.uk
(без STS в заголовке).
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
, и я не понимаю, почему и как заставить ее работать. Может быть проблема с настройками сервера, если да, какие настройки следует проверить?
ഉത്തരം ഈ ഉത്തരത്തിൽ നിന്ന് ഭാഗികമാണ്.
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]
ഇത് പ്രവർത്തിക്കണം. ഞാൻ ഇത് പരീക്ഷിച്ചു.