htaccess rewriterule, [R, L = 301] flags не останавливает его.Зачем? - PullRequest
1 голос
/ 03 февраля 2012

Начало .htaccess -

RewriteEngine On

#begin of rules for administration folder, redirect to https, if not https
RewriteCond %{REQUEST_URI} ^/administration
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]
#end of rules for administration folder

#===no rules for /administration folder below this line===
#the rest part of .htaccess

Почему остальная часть .htaccess все еще работает для https://www.mydomain.com/administration/index.php?Как остановить выполнение остальной части файла .htaccess для URL, следующих за папкой администрирования?Что не так в моем коде?Спасибо.

Ответы [ 4 ]

3 голосов
/ 03 февраля 2012
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
1 голос
/ 03 февраля 2012

Добавьте эту строку поверх вашего файла .htaccess:

RewriteRule ^administration - [NC,L]
0 голосов
/ 04 ноября 2014

В эти дни у меня была такая же проблема, и я получил действительно интересный ответ от пользователя DaveRandom в чате PHP:

"По сути, mod_rewrite эффективно работает в цикле (это не совсем так, но фактически это то, что он делает), а флаг [L] подобен выражению" continue "в PHP (он останавливает обработку приведенных ниже правил в текущая итерация, но затем она снова начнет обрабатывать правила сверху.) Таким образом, в ваших правилах первая итерация соответствовала первому правилу, а затем вторая итерация пропустила первое правило (оно вывело тот же результат, что и входные данные) и затем сопоставил второе правило. "

Возможное решение : «если вы используете apache 2.4, используйте [END] вместо [L], это будет исправлением».

0 голосов
/ 03 февраля 2012

Это из-за синтаксической ошибки. .htaccess будет игнорировать ошибочные строки

Изменить это: -

RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]

К этому: -

RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301]
...