Назад | Перейти на главную страницу

Перенаправить все URL-адреса http и https без www на https://www.example.com через htaccess

По причинам, слишком долгим и сложным для понимания (это включает в себя несколько уровней корпоративной бюрократии, в результате чего кто-то другой не покупает запрошенный мной 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)

У вас есть несколько вариантов решения проблемы:

  • Использовать http://redirect.name, служба. Риск этого решения: зависит от третьей стороны. Оно работает ТОЛЬКО для HTTP запросы перенаправляют на HTTPS, поэтому перенаправление не помогает https://example.com к https://www.example.com
  • Поместите запись «URL» в свой DNS, если ваш регистратор поддерживает ее.
  • Как сказал МДМарра, купите сертификат HTTPS с подстановочным знаком (или мультидоменным).

Я не могу объяснить почему, но похоже, что протокол SSL проверяет проблему с сертификатом домена / поддомена перед обработкой запроса к Apache.

Мои знания .htaccess тоже слабы, но как насчет альтернативного решения?

Вы можете перенаправить все http://example.com к http://example.com/redirect.html и есть ли там кнопка, на которую они могут нажимать? Объясните на странице, что вы делаете.

Не могли бы вы сделать это временное перенаправление в JavaScript или что-то в этом роде?