Intereting Posts
Сохранить строку вывода cURL Display в переменной PHP Лучший способ создать пустой объект в JSON с PHP? Длительный фоновый скрипт PHP блокирует другие страницы PHP до тех пор, пока он не будет завершен Присвоение значений, напечатанных PHP CLI, переменными оболочки Поиск в текстовом режиме MySQLi для нескольких столбцов Каков наилучший способ отразить результаты из базы данных в html-код в PHP? Eval (), в чем смысл? Как использовать имена столбцов в PHP PDO без обязательных столбцов Создание ассоциативного массива из MySQL Query Results – PHP Модель Yii2 сохраняет нулевые значения Случайный друг с использованием FQL Что означает \ d + в терминах регулярного выражения? преобразование fgetcsv-ответа в конкретный json wordpress Вызов функции-члена add_section () для не-объекта в строке functions.php 5 Добавление настраиваемых полей измерения для каждой настройки параметров для переменных продуктов

Htaccess условный https для статических страниц

Мой сайт включен HTTPS, и все страницы обслуживаются только с помощью HTTPS . У клиента теперь есть требование, где он хочет показывать статические страницы, такие как about-us , termsofus как страницы HTTP, а не как HTTPS . Это означает, что даже если пользователь пытается открыть страницу about-us как HTTPS, он должен перенаправить на HTTP-версию about-us .

Мой код .htaccess выглядит следующим образом:

 Options -Indexes <IfModule mod_rewrite.c> RewriteEngine on #RewriteCond %{HTTPS} off #RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} !^\/about-us RewriteCond %{REQUEST_URI} !^\/termsofus RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} \/about-us [OR] RewriteCond %{REQUEST_URI} \/termsofus RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php </IfModule> 

Проблема: всякий раз, когда я открываю HTTP-версию HTTPS about-us страницы, она продолжает перенаправлять меня на index.php . Например: https://example.com/about-us https://example.com/index.php

Сайт использует инфраструктуру PHP YII.

Related of "Htaccess условный https для статических страниц"

Используйте переменную THE_REQUEST вместо REQUEST_URI . THE_REQUEST представляет собой исходный запрос, полученный Apache из вашего браузера, и он не перезаписывается после выполнения некоторых правил перезаписи .

 Options -Indexes RewriteEngine on RewriteCond %{HTTPS} off RewriteCond %{THE_REQUEST} !\s/+(about-us|termsofus) [NC] RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] RewriteCond %{HTTPS} on RewriteCond %{THE_REQUEST} \s/+(about-us|termsofus) [NC] RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php 

Перед тестированием этого изменения обязательно очистите кеш браузера.

Ответ anubhava уже решает проблему и обеспечивает хорошее решение. Я подумал, что просто объясню, что происходит с вашим заявленным примером со ссылкой на ваш исходный код:

Например: https://example.com/about-us https://example.com/index.php

Учитывая запрос для https://example.com/about-us :

  1. Это соответствует вашему второму правилу (HTTPS – «on», и about-us запрашивается) и перенаправляется на http://example.com/about-us (т. Е. Обратно на HTTP).

  2. Перенаправленный запрос (т. http://example.com/about-us ) теперь соответствует последнему правилу и внутренне переписывается в index.php (фронт-контроллер).

  3. Однако в файлах .htaccess каждого каталога (контекст каталога ) «перезаписанный запрос передается механизму синтаксического анализа URL-адреса», и процесс начинается эффективно. Переменная сервера REQUEST_URI также обновляется, чтобы сохранить перезаписанный URL, т.е. /index.php .

  4. Во втором проходе через файл .htaccess запрос (теперь переписанный на http://example.com/index.php ) соответствует вашему первому правилу (HTTPS «выключен», а запрос не является /about-us /termsofus ) поэтому запрос перенаправляется (второй раз) на https://example.com/index.php . (Внутренний переписывающий файл фактически преобразуется во внешнее перенаправление .)

  5. Переадресованный запрос (теперь https://example.com/index.php ) не соответствует никаким правилам в вашем файле .htaccess , поэтому проходит без изменений. Страница подана.

Если вы проверите сетевой трафик, вы увидите две внешние перенаправления, упомянутые выше.

Другое возможное решение – использовать флаг END (только Apache 2.4+) в последнем RewriteRule . Это эффективно завершает процесс перезаписи URL-адресов, поэтому процесс останавливается на шаге 2. Хотя я по-прежнему предпочитаю решение THE_REQUEST вместо этого проверяю THE_REQUEST , что работает на Apache 2.2 и все равно будет работать, если вы THE_REQUEST дополнительные перезаписи.