Как перенаправить поддомен www в протокол https?

У меня есть веб-сайт, к которому я могу получить доступ с несколькими различными URL-адресами, введенными в веб-браузер. Все эти случаи также работают (будут загружены через https Protcol):

lamtakam.com
https://lamtakam.com
https://www.lamtakam.com
http://lamtakam.com       -- automatically will be redirected to https which is correct

Хорошо, теперь все в порядке. Единственная проблема заключается в следующем URL:

http://www.lamtakam.com

Будет загружен через http (не https) протокол. Как я могу сделать это перенаправить на https протокол тоже?


Мой сервер использует Linux Ubuntu в качестве своей ОС и Apache в качестве веб-сервера.


РЕДАКТИРОВАТЬ: Вот содержание /etc/apache2/sites-available/000-default.conf файл:

    #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/myweb

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
RewriteEngine on
RewriteCond %{SERVER_NAME} =lamtakam.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

    <Directory /var/www/html/myweb>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

1 ответ

Решение

Проблема в том, что вы переписываете, когда нужно переписать. Он настроен на точное совпадение только с голым доменом (= lamtakam.com), а не соответствовать www. поддомен в состоянии переписать.

Попробуйте использовать это вместо ваших условий переписывания и правила:

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^(www\.)?lamtakam\.com$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [END,NE,R=permanent]

... затем перезапустите Apache и посмотрите, происходит ли перенаправление сайта. Тем не менее, сначала позаботьтесь о том, чтобы сжечь кеш вашего браузера, чтобы у вас не было проблем с кэшированными данными страницы.

Это нарушает то, что ваша конфигурация была настроена для:

  1. Требование, чтобы HTTPS не был включен (т.е. запрос был http:// и не https://), а также
  2. Требование запрашиваемого имени хоста / домена соответствует указанному регулярному выражению (которое соответствует www.lamtakam.com а также lamtakam.com), а также
  3. Переписывает ли, используя значение HTTP_HOST вместо SERVER_NAME, чтобы сохранить домены одинаковыми. Вы можете изменить это, чтобы быть %{SERVER_NAME} в правиле перезаписи, если вы хотите (или если ваш сайт нуждается в этом), хотя я предпочитаю использовать изначально запрошенное имя хоста в HTTP_HOST,

Обратите внимание, что я предлагаю использовать %{HTTP_HOST} чтобы вы соответствовали фактическому запрошенному имени хоста, а не "имени сервера", которое хранит Apache.

(этот ответ адаптирован из ответа о синтаксисе RewriteCond %{SERVER_NAME}, выполненного starkeen over StackOverflow)

Другие вопросы по тегам