Как перенаправить поддомен 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 и посмотрите, происходит ли перенаправление сайта. Тем не менее, сначала позаботьтесь о том, чтобы сжечь кеш вашего браузера, чтобы у вас не было проблем с кэшированными данными страницы.
Это нарушает то, что ваша конфигурация была настроена для:
- Требование, чтобы HTTPS не был включен (т.е. запрос был
http://
и неhttps://
), а также - Требование запрашиваемого имени хоста / домена соответствует указанному регулярному выражению (которое соответствует
www.lamtakam.com
а такжеlamtakam.com
), а также - Переписывает ли, используя значение
HTTP_HOST
вместоSERVER_NAME
, чтобы сохранить домены одинаковыми. Вы можете изменить это, чтобы быть%{SERVER_NAME}
в правиле перезаписи, если вы хотите (или если ваш сайт нуждается в этом), хотя я предпочитаю использовать изначально запрошенное имя хоста вHTTP_HOST
,
Обратите внимание, что я предлагаю использовать %{HTTP_HOST}
чтобы вы соответствовали фактическому запрошенному имени хоста, а не "имени сервера", которое хранит Apache.
(этот ответ адаптирован из ответа о синтаксисе RewriteCond %{SERVER_NAME}, выполненного starkeen over StackOverflow)