Перепишите cond для домена и www.domain letsencrypt
У меня есть этот виртуальный хост в /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
,
1 ответ
Давайте посмотрим на эту строку:
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
и т.п.