Я тщательно искал это, но пока не получил четкого ответа.
Например, скажем, у меня есть домен example.com
, и я хочу, чтобы это был мой канонический URL (например, www.example.com
следует 301 перенаправить на example.com
.
Вот что я сделал:
- с точки зрения DNS
- добавил запись
A
для example.com
к server IP
- добавил запись
CNAME
для www.example.com
в качестве псевдонима для example.com
- для веб-сервера (я использовал nginx, если это имеет значение)
- имеет значение Upstream для
server IP
- перенаправить все
http
на https
- перенаправить конкретный
www.example.com
с конфигурацией запроса 301 следующим образом: return 301 $scheme://example.com;
А затем я протестировал с помощью средства проверки перенаправления, такого как this , и получил следующий результат:
http://example.com
-> 301 редирект на https://example.com
http://www.example.com
-> 301 редирект на https://www.example.com
https://example.com
-> 200 OK, контент нормально обслуживается https://www.example.com
-> 301 перенаправление на https://example.com
Это похоже на то, чего я хотел достичь, и открытие всех этих 4 ссылок в моем Chrome браузере сработало. Все эти ссылки правильно перенаправляются на https://example.com
со всеми действующими сертификатами.
Но если я попытаюсь проверить свой сайт, например, на woorank.com , или попытаюсь сделать запрос с помощью * Модуль 1096 * request
мне сказали, что сертификат www.example.com
недействителен.
>>> import requests
>>> r = requests.get("https://www.example.com")
>>> r
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.example.id', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError("hostname 'www.example.com' doesn't match 'example.com'")))
Это потому, что у меня был только один сертификат, зарегистрированный в домене example.com
, и используйте его как для виртуального хоста example.com
, так и для www.example.com
.
Это потому, что я видел ссылку на форуме , в которой говорится, что:
Другой Причина использования DNS - избежать получения https для обоих доменов.
Что я пропустил?
РЕДАКТИРОВАТЬ:
Если это важно, я использую docker image nginx-proxy
для автоматического создания виртуального хоста. Сертификат подписан как example.com
, и у меня есть конфигурации example.com
и www.example.com
, созданные как virtualhost.