Если у вас есть 2 виртуальных хоста, я использую ваши правила перенаправления:
Listen 80
<VirtualHost *:80>
ServerName www.test.com
ServerAlias test.com
[... OTHER CONFIGURATION ...]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^test\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://test.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.test.com$ [OR]
RewriteCond %{HTTP_HOST} ^test.com$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</VirtualHost
Listen 443
<VirtualHost *:443>
ServerName www.test.com
ServerAlias test.com
[... OTHER CONFIGURATION ...]
</VirtualHost>
Вы запрашиваете http://test.com
-> https://test.com/$1
because of `RewriteCond %{HTTP_HOST} ^test\.com$`
Вы запрашиваете http://ANYTHING
-> https://test.com/$1
из-за RewriteCond %{HTTPS} off
.Зачем?Из-за опции [OR]
.Это должно быть '[AND]', что подразумевается.Так что удалите [OR]
.То же самое и для второго.
Также вы противоречите себе во второй группе директив.Там написано:
- это www.test.com
- ИЛИ test.com
- не каталог
- не файл
- Перейти к index.php
Вы сказали, что хотите перенаправить не-www запросы на https.
Поэтому вы хотите:
Эта конфигурация будет делать следующее:
Listen 80
<VirtualHost *:80>
ServerName www.test.com
ServerAlias test.com
[... OTHER CONFIGURATION ...]
RewriteEngine On
# http://test.com --> redirect to <VirtualHost *:443>
# Everything else stays in <VirtualHost *:80>
RewriteCond %{HTTP_HOST} ^test\.com$
RewriteRule ^(.*)$ https://test.com/$1 [R=301,L]
# Default page index.php, avoid 404
RewriteCond %{HTTP_HOST} ^www.test.com$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</VirtualHost
Listen 443
<VirtualHost *:443>
ServerName www.test.com
ServerAlias test.com
[... OTHER CONFIGURATION ...]
# Default page index.php, avoid 404
RewriteCond %{HTTP_HOST} ^www.test.com$ [OR]
RewriteCond %{HTTP_HOST} ^test.com$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</VirtualHost>