Я получил следующий .conf
файл:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/example/public
<Directory /var/www/html/example>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Я также использую Let's Encrypt SSL. Все запросы к example.com
работают нормально и перенаправляются на HTTPS. Проблема в том, что псевдоним домена не работает. Когда я запрашиваю www.example.com
, я получаю ошибку ERR_NAME_NOT_RESOLVED
. Может ли кто-нибудь указать мне правильное направление?
ERR_NAME_NOT_RESOLVED - это ошибка разрешения DNS, которая предполагает, что запрос даже не достигает вашего сервера.
В дополнение к конфигурации, представленной в вашем вопросе, вам также понадобится соответствующий A Запись
(или запись CNAME
, если это один и тот же домен, только с разницей в субдомене), определенная в DNS, которая указывает www.example.com
на ваш сервер. Без этого запрос не может быть разрешен .
Кроме того:
RewriteEngine on RewriteCond% {SERVER_NAME} = example.com [ИЛИ] RewriteCond% {SERVER_NAME} = www.example.com RewriteRule ^ https: //% {SERVER_NAME}% {REQUEST_URI} [END, NE, R = постоянный]
Ваш блок перенаправления слишком сложен. Mod_rewrite не нужен, достаточно одного mod_alias Redirect
. Предполагая, что вы также хотите канонизировать имя хоста?Вам не нужно проверять SERVER_NAME
, потому что, предположительно, вы хотите перенаправить любой запрос, достигший порта 80 vHost?
Например, вероятно, будет достаточно следующего:
Redirect 301 / http://example.com/