Перепишите 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 OnApache httpd будет использовать имя хоста и порт, указанные вServerNameдиректива для построения канонического имени для сервера.С
UseCanonicalName OffApache 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 и т.п.