mod_rewrite в .htacess игнорируется после установки сертификата Let's Encrypt - PullRequest
0 голосов
/ 04 марта 2020

У меня есть два виртуальных хоста на VPS под управлением Ubuntu 18.04 и Apache 2.4.29.

Я буду называть их "project" и "project2"

Я установил SSL-сертификат для «проекта» с LetsEncrypt.

После этого я обнаружил, что он игнорирует все RewriteRules для этого домена. Я ввел очень простую RewriteRule (без условия) просто перенаправить на example.com:

RewriteEngine on
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

Я попытался ввести его в файл конфигурации хоста для "проекта", а также в файл .htaccess. В обоих случаях это не имеет никакого эффекта.

Я подтвердил, что файл .htaccess читается, потому что, если я намеренно помещаю в него мусор, я получаю ошибку 500.

phpinfo () подтверждает, что mod_rewrite загружен, и если я запускаю a2enmod rewrite, он возвращает сообщение «Перезапись модуля уже включена».

Я подтвердил, что поведение ограничено только для виртуального хоста для домена проекта. У меня точно такой же RewriteRule в файле .htaccess для домена "project2", и этот RewriteRule выполняется. Похоже, единственное отличие состоит в том, что я не установил SSL-сертификат для домена «project2».

Я проверил журналы ошибок Apache и не могу найти ничего, что проливает свет на этот вопрос. .

Еще одно неожиданное поведение, которое, я думаю, может быть связано, заключается в том, что я не могу перейти к http://project.com. Это всегда заставляет меня https://project.com. Я не могу найти, где это происходит.

Ниже приведены соответствующие файлы для "проекта" с закомментированными материалами, удаленными для более удобного чтения.

project.conf (/etc/apache2/sites-available/project.conf)

<VirtualHost *:80>
        ServerAdmin webmaster@project.com
        ServerName project.com
        ServerAlias www.project.com
        DocumentRoot /var/www/html/project/public
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<Directory /var/www/html/project/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

project-le-ssl.conf (/etc/apache2/sites-available/project-le-ssl.conf)

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@project.com
        ServerName project.com
        ServerAlias www.project.com
        DocumentRoot /var/www/html/project/public
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/project.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/project.com/privkey.pem
</VirtualHost>
</IfModule>

apache2.conf (/etc/apache2/apache2.conf)

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>
<Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
        Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
Include /etc/phpmyadmin/apache.conf

.htaccess (/ var / www/html/project/.htaccess) (идентичный файл .htaccess для "project2" находится в / var / www/html/project2/.htaccess)

RewriteEngine on
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

Header set X-Robots-Tag "noindex, nofollow"

options-ssl- apache .conf (/etc/letsencrypt/options-ssl-apache.conf)

SSLEngine on
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECD$
SSLHonorCipherOrder     on
SSLCompression          off
SSLOptions +StrictRequire
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
ErrorLog /var/log/apache2/error.log

Это единственные файлы, которые мне известны это имеет отношение к теме, хотя я представляю, что есть другие, о которых я не знаю.

У кого-нибудь есть какие-либо идеи относительно того, что вызывает игнорирование RewriteRule для "проекта"? И что имеет второстепенное значение, кто-нибудь знает, где находятся инструкции, которые не позволяют мне перемещаться http://project.com после установки сертификата SSL?

...