Должны ли все домены быть на сертификате SSL при канонизации доменов через 301 редирект с HTTP на HTTPS в Apache?

У меня есть несколько доменов, которые все указывают на один и тот же сервер. Только один из этих доменов (основной) действительно включен в мой SSL-сертификат. Я включил следующее в свой файл httpd.conf на некоторое время, чтобы все они постоянно перенаправляли на один домен.

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

Предполагается, что все домены ДОЛЖНЫ 301 перенаправлять на www.example. com как HTTPS. Однако недавно я заметил, что эти перенаправления происходят - но как перенаправление 302. Я попробовал проверить работоспособность здесь , и, похоже, она работает так, как я ожидал.

Итак, напомним:

Что происходит: http://sub1.example.com приводит к перенаправлению 302 на https://www.example.com .

Что должно произойти: http://sub1.example.com приводит к перенаправлению 301 на https://www.example.com .

Мой вопрос: , должны ли все домены быть указаны в сертификате SSL, чтобы такое перенаправление произошло как 301? Я здесь просто тяну за соломинку.

Для полноты, вот заголовки запроса / ответа начальной и целевой страницы, когда это происходит.

Заголовок запроса для начальной страницы ( sub1.example .com ):

GET / HTTP/1.1
Host: sub1.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

Заголовок ответа для начальной страницы ( sub1.example.com ):

HTTP/1.1 302 Found
Date: Wed, 04 Oct 2017 21:05:16 GMT
Server: Apache
Location: https://www.example.com/
Cache-Control: max-age=1
Expires: Wed, 04 Oct 2017 21:05:18 GMT
Content-Length: 212
Keep-Alive: timeout=5, max=150
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

Заголовок запроса для целевой страницы ( www.example.com ):

GET / HTTP/1.1
Host: www.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Cookie: <redacted>

Ответ заголовок целевой страницы ( www.example.com ):

HTTP/1.1 200 OK
Date: Wed, 04 Oct 2017 21:05:16 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=150
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
2
задан 19 December 2017 в 17:21
1 ответ

Если вы видите редирект 302, то может показаться, что это перенаправление в конечном итоге запускает что-то еще. Опубликованный вами код, если он выполняется, явно имеет номер 301.

должны ли все домены быть указаны в сертификате SSL, чтобы такое перенаправление происходило как 301?

Нет, при условии, что вы только перенаправление с HTTP - как видно из ваших примеров.

Если бы другие ваши домены не были указаны в сертификате SSL, то у вас, очевидно, возникли бы проблемы при попытке перенаправить с https: // otherdomain. com / ... , поскольку запрос никогда не достигнет вашего сервера (если пользователь не принял недопустимый сертификат).

3
ответ дан 3 December 2019 в 10:34

Теги

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