Назад | Перейти на главную страницу

HTTPS иногда перенаправляет обратно на HTTP

Возникла странная проблема, нужна помощь.

У меня есть URL:

https://example.com/sslTest?bbb=&eeee=1

В некоторые случайные моменты, если я нажимаю Enter в адресной строке браузера, он перенаправляется на HTTP:

http://example.com/sslTest?bbb=&eeee=1

Я использую хром:

Вот мой .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

ErrorDocument 404 https://example.com/404.php

Options -Indexes

Все работало постоянно и вроде ничего не изменилось, чтобы повлиять на это. Также интересным фактом является то, что если я удалю запрос, он перенаправит обратно на страницу и HTTPS.

Я пытался добавить:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

В чем может быть проблема? Страница возвращает ошибку 400.

РЕДАКТИРОВАТЬ: Также такая же проблема возникает, если я добавляю URL-запрос даже в пустой файл php

Похоже, что условие не соответствует запросу, который вы пытаетесь перенаправить на HTTPS:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

ErrorDocument 404 https://example.com/404.php

Options -Indexes

Из документов: https://httpd.apache.org/docs/current/mod/mod_rewrite.html

The RewriteCond directive defines a rule condition. One or more RewriteCond can precede a RewriteRule directive. The following rule is then only used if both the current state of the URI matches its pattern, and if these conditions are met.

В RewriteCond не соответствуют запросу в AND мода:

http://example.com/sslTest?bbb=&eeee=1

RewriteCond %{REQUEST_FILENAME}.php -f

Так что, вероятно, RewriteRule не применяется для этого запроса.


Несмотря на то, что он может совпадать, REQUEST_FILENAME в конечном итоге может быть сначала разрешен в некоторый файл, содержащий .php окончание. Без полной конфигурации это невозможно проверить. И я предполагаю, что в вашей настройке это не так.

Из документов REQUEST_FILENAME:

The full local filesystem path to the file or script matching the request,
if this has already been determined by the server at the time REQUEST_FILENAME
is referenced. Otherwise, such as when used in virtual host context, the same value as
REQUEST_URI. Depending on the value of AcceptPathInfo, the server may have only used 
some leading components of the REQUEST_URI to map the request to a file.

Если вы хотите, чтобы HTTPS был включен для всех URI, сделайте это просто следующим образом:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Условие: Если https не включен.

И правило перезаписи соответствует чему-либо в uri и отправляет его своему https-аналогу.