Возникла странная проблема, нужна помощь.
У меня есть 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-аналогу.