Как перенаправить HTTPS в HTTP для некоторых страниц, используя .htaccess - PullRequest
1 голос
/ 25 июля 2011

У меня проблема с перезаписью URL с использованием .htaccess.

Я должен перенаправить все URL-адреса в HTTPS, кроме 4-х. Ниже приведен код в моем файле .htaccess:

RewriteEngine On
Options +FollowSymlinks
RewriteBase /

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_REFERER} !^https(.*)/(.*)$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{REQUEST_URI} ^/?index\.php$ [NC]
RewriteCond %{REQUEST_URI} ^/?index\.php?view=default [NC]
RewriteCond %{REQUEST_URI} ^/?index\.php?view=news [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301, NC, L]

# Require SSL on all other pages
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}r%{REQUEST_URI} [R=301, NC, L]

Мне нужно отключить HTTPS для следующих URL:

  1. mydomain.com/
  2. mydomain.com/index.php
  3. mydomain.com/index.php?view=new
  4. mydomain.com/index.php?view=new&abc=xyz&aaa=bbb…
  5. mydomain.com/index.php?view=default

Для выше 5 URL, я хочу перенаправить в http, но это не работает. Он перенаправляет все URL-адреса только на HTTPS.

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Условия RewriteCond действуют как «и», поэтому он не будет соответствовать всем 4 шаблонам файлов одновременно. Один из вариантов - отдельные наборы правил - мне нравится это делать, когда я это выясняю Другой вариант - заставить работать шаблон «или».

Строка запроса обрабатывается в RewriteCond, а не в RewriteRule.

Я не уверен, что вам нужно было проверить на HTTP_REFERER, поэтому я пропустил это.

Это разделяет два правила, чтобы сделать его проще. Первый делает простой слеш или необязательный index.php без параметров. Вторая проверяет строку запроса на просмотр = по умолчанию или новый.

RewriteCond %{HTTPS} on
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_URI} ^/(index\.php)?$ [NC]
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301, NC]

RewriteCond %{HTTPS} on
RewriteCond %{QUERY_STRING} ^view=(default|new(&.*)?)$ [NC]
RewriteCond %{REQUEST_URI} ^/?index\.php$ [NC]
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301, NC]

Условие строки запроса точно проверяет view=default или view=new или view=new&any=other... Необязательный &.* означает, что следующая вещь должна быть амперсандом или ничем, что предотвращает совпадение представления = new2 по ошибке.

Обратите внимание, что пользователь может получить предупреждение браузера о перенаправлении на «небезопасную» страницу, когда вы перенаправляете их с https на http. Предупреждение о перенаправлении больше не является проблемой; Я просто помню это с IE6 дней. Как перенаправить с HTTPS на HTTP без раздражающих сообщений об ошибках

EDIT: Я добавил условие в первое правило для пустой строки запроса. Я понял, что соответствует любой строке запроса без нее.

0 голосов
/ 07 марта 2013

Я также столкнулся с этой проблемой, и для меня эта помощь

RewriteCond %{HTTPS} !^on$
RewriteCond %{REQUEST_URI} ^(/check-out|/payment)$
RewriteRule (.*) https://www.my_site.com/$1 [R,L]

Вам необходимо изменить имя страницы и URL вашего сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...