У меня проблема с перенаправлением HTTP:
Я начинаю и говорю, что моя домашняя страница идеально перенаправляет HTTP на HTTPS. Все мои страницы также показывают HTTPS, но как только я помещаю URL-адрес с HTTP или просто www.example.co.uk/page1
он перейдет в HTTP.
Например:
https://example.co.uk/about-us/
http://example.co.uk/about-us/
У меня уже был этот код в моем .htaccess
файл:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} (www\.)?example.co.uk
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
и я изменил его на код, о котором я видел, как кто-то упомянул, чтобы исправить проблему:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
и он все еще не работает, у обоих одна и та же проблема.
Редактировать # 1: У меня есть еще один код над тем, который я упомянул, он всегда был там:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTPS} off
</IfModule>
Редактировать # 2: Мой полный .htaccess
файл:
у меня есть другой код выше того, что я упомянул
Вы ввели код не в то место. Ваше перенаправление HTTP на HTTPS должно быть перед существующий код в самом верху вашего .htaccess
файл.
Если вы разместите перенаправление после приведенного выше кода, оно не будет обрабатываться ни для чего, кроме домашней страницы (корневого каталога) или существующих файлов / каталогов. Следовательно, вы видите перенаправление только для домашней страницы.
Вам не нужно повторять RewriteEngine
директива.
У вас тоже есть лишнее RewriteCond
директиву в конце, которую следует удалить.
Другими словами, ваш .htaccess
должно выглядеть так:
# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Front-controller
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Хотя, если это не WordPress и у вас тоже # BEGIN WordPress
/ # END WordPress
маркеры комментариев, затем <IfModule>
обертка не нужна и будет более читабельной, если ее переписать следующим образом:
RewriteEngine On
RewriteBase /
# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Front-controller
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
Обратите внимание, что я удалил префикс косой черты на последнем RewriteRule
замена строка. (Это то, что RewriteBase
директива для. Хотя RewriteBase
директива здесь не является строго необходимой.)