У меня этот виртуальный хост /etc/apache2/sites-available/cv.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/cv/web
<Directory /var/www/cv/web>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/cv_error.log
CustomLog ${APACHE_LOG_DIR}/cv_access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Линии Rewrite*
были добавлены letsencrypt, и я проверил в Google, кажется, это хороший способ сделать это. Но когда я иду в domain.com
это не перенаправляет меня на https://example.com
(загружает 000-default.conf). Тем не менее он перенаправляет меня на https://www.example.com
когда я продолжу www.example.com
Есть ли у вас какие-либо идеи? Я не знаю, как это отладить. Журналы подтверждают то, что я говорю, cv_access.log не печатает никаких запросов, когда я продолжаю domain.com
.
Взглянем на эту строку:
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Здесь %{SERVER_NAME}
переменная зависит от UseCanonicalName
, по умолчанию установлено Off
. Следовательно, переменная имеет содержимое Host:
заголовок, а не тот, который указан в ServerName
.
С участием
UseCanonicalName On
Apache httpd будет использовать имя хоста и порт, указанные вServerName
директива для создания канонического имени для сервера.С участием
UseCanonicalName Off
Apache httpd будет формировать самореференциальные URL-адреса, используя имя хоста и порт. поставляется клиентом если таковые имеются (в противном случае будет использоваться каноническое имя, как определено выше).
Если вы предпочитаете продолжать использовать mod_rewrite для этого перенаправления у вас есть два варианта:
UseCanonicalName On
.Используйте желаемое имя хоста непосредственно в своем правиле, например
RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]
Однако вы слишком усложняете ситуацию, поскольку вы могли бы сделать то же самое без mod_rewrite:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect / https://example.com/
</VirtualHost>
Здесь Redirect
Директива исходит из mod_alias, и вам не нужно DocumentRoot
и т.п.