заставить HTTPS только на не www - PullRequest
0 голосов
/ 01 октября 2018

Текущий код

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.test.com$ [OR]
RewriteCond %{HTTP_HOST} ^test.com$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Мне нужно перенаправить не трафик www на HTTPS www, но нужно оставить трафик www с прямым доступом без применения HTTPS.

Так что я попробовал это

Options +FollowSymLinks
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]

Но я получаю "слишком много перенаправлений" и не знаю почему.index.php поступает из установки laravel.

1 Ответ

0 голосов
/ 01 октября 2018

Если у вас есть 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...