Использование .htaccess для принудительного использования HTTP или HTTPS - PullRequest
0 голосов
/ 30 марта 2010

У меня уже есть этот код для принудительной установки этих URL на HTTPS:

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/my/?.*$
RewriteCond %{REQUEST_URI} !^/my/basket/add?.*$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/login/?.*$
RewriteCond %{REQUEST_URI} ^/logout/?.*$
RewriteCond %{REQUEST_URI} ^/register/?.*$
RewriteCond %{REQUEST_URI} ^/newsletter/?.*$
RewriteCond %{REQUEST_URI} ^/reset-password/?.*$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

И это действительно хорошо работает, но я хочу принудительно заставить любой URL, который не не соответствует вышеуказанным условиям, HTTP, запустить 301.

Я не хочу создавать список HTTP страниц и перенаправлять их, как у меня с HTTPS выше. URL-адреса защищенных страниц всегда будут оставаться неизменными, если я не изменю систему каким-либо образом, но я могу обновлять их при необходимости. Незащищенные страницы могут динамически создаваться и редактироваться некоторыми сотрудниками отдела продаж, поэтому они должны быть целенаправленными.

Есть мысли о том, как я мог это сделать? должен был сделать с помощью .htaccess, я достиг этого, обрабатывая его в нашей среде PHP, но это вызвало довольно значительную проблему с производительностью, а также проблемы с нашими обходами Google. *

Ура!

Ответы [ 2 ]

4 голосов
/ 14 апреля 2010

Модификация ответа от Seidr, потому что на самом деле вы хотите перенаправить только если HTTPS включен, когда вы хотите, чтобы он был выключен (также нет переменной% {HTTP}). Опять же, поместите это после всех ваших правил.

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/login/?.*$
RewriteCond %{REQUEST_URI} !^/logout/?.*$
RewriteCond %{REQUEST_URI} !^/register/?.*$
RewriteCond %{REQUEST_URI} !^/newsletter/?.*$
RewriteCond %{REQUEST_URI} !^/reset-password/?.*$
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Хотя не проверял это, так что не 100%, что это будет работать.

Редактировать: Требуются условия для защищенных страниц, чтобы они по-прежнему оставались в режиме HTTPS.

1 голос
/ 30 марта 2010

Поскольку вы используете флаг L в своем правиле, вы можете просто использовать RewriteCond, такой как приведенный ниже, для перезаписи любых запросов, которые не были перехвачены в предыдущих условиях, в HTTP? Поместите его ПОСЛЕ правил, которые вы опубликовали. Это кажется слишком очевидным, но это может сработать.

RewriteCond %{REQUEST_URI} ^.*$
RewriteCond %{HTTP} OFF
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...