htaccess force https не работает, если нет URI

Oct 03 2020

Я никогда не работал с Apache, поэтому я новичок.

У меня есть мультихостинговая учетная запись на сайте провайдера, где используются 3 домена. Я хочу принудительно установить https-соединение в домене, который, скажем example.com, не является основным доменом плана хостинга. Что я сделал, так это добавил .htaccessфайл в путь examplecom/public_html, папку, в которой находятся все файлы веб-сайта. В .htaccessменя есть копии вставили эти строки из руководства поставщика:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [L,R=301]

Веб-сайт работает правильно, если я перехожу на страницу с непустым URI, но его нет на главной странице. В примере: http://example.com/anypageправильно перенаправлен на https://www.example.com/anypage, а http://example.com/перенаправлен на https://www.example.com/public_html, и не может понять почему.

Ответы

3 MrWhite Oct 03 2020 at 07:24

Похоже, у вас может быть конфликт с существующими директивами, однако вы можете попробовать изменить существующие директивы, чтобы увидеть, имеет ли это значение:

RewriteEngine On

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com/$1 [L,R=301]

Если .htaccessфайл находится в examplecom/public_htmlкаталоге, то захваченная обратная ссылка ( $1) должна содержать только все, что идет после этого (если есть). Тогда как REQUEST_URIпеременная сервера всегда содержит полный URL-путь.

RewriteBaseДиректива лишняя здесь , так как вы используете абсолютный URL в RewriteRule замещении .

Перед тестированием вам необходимо очистить кеш браузера, так как ошибочный 301, скорее всего, был кэширован. Протестируйте с 302 (временными) перенаправлениями, чтобы избежать проблем с кешированием.