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

На страницах моего сайта есть и http, и https, как решить эту проблему, имея только https?

У меня проблема с перенаправлением 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 директива здесь не является строго необходимой.)