Apache HTTPS / не WWW перенаправление

Я хочу перенаправить весь мой веб-трафик на https://example.com/

Пока что у меня есть все, кроме https:www.example.com перенаправление отлично

Вот как выглядит мой файл конфигурации виртуального хоста

<VirtualHost _default_:80>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/(.*) https://example.com/ [R,L]
  RewriteCond %{HTTPS_HOST} ^https://www.example.com [NC]
  RewriteRule ^/(.*) https://example.com/ [R,L]
  <Directory "/opt/bitnami/apache2/htdocs">
  ........

Единственный сайт, который не перенаправляет

https://www.example.com/

Что мне не хватает??

2 ответа

Решение

Как сказал Томас, вы хотите использовать HTTP_HOST, Также ваша информация является избыточной и даже бесполезной. Также вы перенаправляете порт 80 на 443, что означает HTTPS будет отключен (не установлен) в любом случае. И для перенаправления на порт 443 вам нужно это перенаправление в определении 443.

# http://... to https://...
<VirtualHost _default_:80>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  RewriteEngine On
  RewriteRule ^/(.*) https://example.com/$1 [R,L]
  ...
</VirtualHost>

# https://www.example.com -> https://example.com
<VirtualHost _default_:443>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
  RewriteRule ^/(.*) https://example.com/$1 [R,L]
  ...
</VirtualHost>

Также вы, вероятно, хотите $1 так что вы не потеряете путь при перенаправлении.

Как упомянуто Томасом, \. это хорошая идея, иначе вы могли бы сопоставить больше, чем ожидалось (для хоста это маловероятно, хотя...)

HTTPS_HOST не существует, насколько я знаю, вы хотите HTTP_HOST, Кроме того, HTTP_HOST Переменная не включает схему.

Кроме того, хотя технически это все еще будет работать, вы можете избежать .х (за исключением RewriteRule подстановки), поскольку они имеют особое значение в контексте регулярного выражения (что означает "любой символ"). Конечно, точка также квалифицируется как любой персонаж, это все еще хорошая практика.

<VirtualHost _default_:80>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/(.*) https://example.com/ [R,L]
  RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
  RewriteRule ^/(.*) https://example.com/ [R,L]
  <Directory "/opt/bitnami/apache2/htdocs">
Другие вопросы по тегам