У меня возникла проблема с перезаписью apache на CentOS.
Если я загружаю свой сайт по HTTP, он работает нормально. Правила перезаписи работают. Как только я меняю его на HTTPS, правила перезаписи не работают.
После некоторых тестов и просмотра потоков я понял, что каким-то образом apache не получает файл .htaccess, если доступ к веб-сайту осуществляется через HTTPS.
Что я сделал для тестирования, так это вставил deny from all в файл .htaccess. Когда я получаю доступ http://my.domain.com он показывает Запрещенную ошибку. Когда я получаю доступ через https://my.domain.com Я все еще могу загрузить страницу, это означает, что .htaccess не читается.
Я проверил httpd.conf и ssl.conf, а также убедился, что AllowOverride All установлен. Есть ли еще что-нибудь, что я мог бы пропустить?
Вот моя конфигурация httpd.conf:
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/httpd/ssl/my.domain.crt
SSLCertificateKeyFile /etc/httpd/ssl/my.domain.key
SSLCACertificateFile /etc/httpd/ssl/caroot.crt
ServerAdmin webmaster@domain.com
ServerName my.domain.com
ServerAlias my.domain.com
DocumentRoot /var/www/my.domain.com/public_html/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/my.domain.com/public_html/>
Options Indexes FollowSymLinks ExecCGI MultiViews
#RewriteEngine on
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/www/my.domain.com/logs/ssl-error.log
CustomLog /var/www/my.domain.com/logs/ssl-access.log combined
</VirtualHost>
А ниже мой файл .htaccess, помещенный в /var/www/my.domain.com/public_html/
AddType text/x-component .htc
Options FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>
Ниже приведена конфигурация порта 80:
<VirtualHost *:80>
ServerAdmin webmaster@domain.com
ServerName my.domain.com
ServerAlias my.domain.com
DocumentRoot /var/www/my.domain.com/public_html/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/my.domain.com/public_html/>
Options Indexes FollowSymLinks ExecCGI MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/www/my.domain.com/logs/error.log
CustomLog /var/www/my.domain.com/logs/access.log combined
</VirtualHost>
Убедитесь, что ваша глобальная конфигурация Apache имеет следующую строку:
AccessFileName .htaccess
Превращаю мой комментарий в ответ:
Есть ли другой виртуальный хост по умолчанию? Поскольку все, что вы показали, кажется правильным, я подозреваю, что есть еще что-то, препятствующее правильной работе. Скорее всего, файлы conf по умолчанию и / или их настройки по умолчанию.
Проверьте настройки по умолчанию в ssl.conf, особенно ServerName и ServerAlias. Также httpd.conf