По причинам, слишком долгим и сложным для понимания (это включает в себя несколько уровней корпоративной бюрократии, в результате чего кто-то другой не покупает запрошенный мной SSL-сертификат с подстановочными знаками), мне нужно настроить домен для перенаправления всех запросов на https://www.example.com - безопасный протокол с www
поддомен.
РЕДАКТИРОВАТЬ: SSL-сертификат действителен только для домена www.xyz.com.
Так: http://example.com, http://www.example.com, и https://example.com ВСЕ должны перенаправлять на https://www.example.com.
Мой .htaccess-fu в лучшем случае слаб, и я не могу заставить его работать. Примечание: хостинг осуществляется на Media Temple, если это имеет значение.
Пока мой файл .htaccess выглядит так:
RewriteEngine On
RewriteCond %{HTTPS} !^on$
RewriteRule (.*) https://www.example.com/$1 [R,L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Обе http://example.com и http://www.example.com перенаправляются на https://www.example.com, так ура. Тем не мение, https://example.com является не перенаправление на https://www.example.com и, таким образом, выдает страницу с предупреждением о безопасности:
Вероятно, это не тот сайт, который вы ищете!
Вы пытались связаться с example.com, но вместо этого вы фактически достигли сервера, идентифицирующего себя как www.example.com. Это может быть вызвано неправильной конфигурацией на сервере или чем-то более серьезным. Злоумышленник в вашей сети может попытаться заставить вас посетить поддельную (и потенциально опасную) версию example.com.
Вам не следует продолжать, особенно если вы никогда раньше не видели это предупреждение для этого сайта.
Любая помощь в преодолении этого последнего горба будет очень благодарна!
@ Simbus82 прав в том, что меняет правила. Вот подход, который немного более универсален.
RewriteEngine On
# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Вам нужен сертификат, действительный для обоих example.com
и www.example.com
если вы собираетесь переписать эти запросы на www.example.com
(или два отдельных сертификата, которые это делают). Нет никакого способа обойти это.
Инвертируйте правила ;-)
Я использую это, и у меня была твоя проблема
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site.it [NC]
RewriteRule (.*) http://www.site.it/$1 [L,R=301]
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://www.site.it/$1 [R=301,L]
Сначала перепишите на www, а затем проверьте https.
Это очень сложный вопрос. Большинство учебных пособий в Интернете, как и Simbus82, советуют вам просто инвертировать некоторые строки кода внутри htacess. Это не всегда будет работать (особенно если у вас есть оборудование для разгрузки SSL перед Apache)
У вас есть несколько вариантов решения проблемы:
Я не могу объяснить почему, но похоже, что протокол SSL проверяет проблему с сертификатом домена / поддомена перед обработкой запроса к Apache.
Мои знания .htaccess тоже слабы, но как насчет альтернативного решения?
Вы можете перенаправить все http://example.com к http://example.com/redirect.html и есть ли там кнопка, на которую они могут нажимать? Объясните на странице, что вы делаете.
Не могли бы вы сделать это временное перенаправление в JavaScript или что-то в этом роде?