mod_rewrite
обрабатывает правила линейно.Правила в верхней части файла обрабатываются в первую очередь.
[nc]
и [L]
в конце правил - это варианты обработки правил.
- nc- nocase : без учета регистра
- L - last : последнее правило в выполнении (если вы нажмете это, остановите обработку)
Вам нужно поставить ваши правила www redirect
выше ваших правил CI, чтобы он сначала добавил www, ТО затем примените правила CI к вновь переписанному URL.** А также используйте флаг C
или N
с вашим правилом www redirect
, чтобы он анализировал следующее правило.
http://mysite.com/blah
== становится ==> http://www.mysite.com/blah
== становится==> http://www.mysite.com/index.php/blah
(Выполнено, не перенаправлено)
В настоящее время происходит следующее:
http://mysite.com/blah
== становится ==> http://mysite.com/index.php/blah
(СТОП)
Браузер переходит на http://mysite.com/index.php/blah
, и второй этап перезаписи выполняется, поскольку ваши исключения останавливают обработку /index.php URL-адресов
http://mysite.com/index.php/blah
==становится ==> http://www.mysite.com/index.php/blah
(Перенаправлено)
Как предложено, вот ссылка на документацию mod_rewrite , если вы хотите посмотреть дальше.
@ LazyOne: Brainfart, извините.
Вот выдержка из документов, в которых указаны флаги, которые вам, вероятно, понадобятся:
'chain | C' (связан со следующим правилом) Этот флаг объединяет текущее правило со следующим правилом (которое само может быть связано со следующим правилом и т. Д.).Это имеет следующий эффект: если правило соответствует, тогда обработка продолжается как обычно - флаг не имеет никакого эффекта.Если правило не совпадает, то все последующие связанные правила пропускаются.Например, его можно использовать для удаления части .www'' part, inside a per-directory rule set, when you let an external redirect happen (where the
.www '' не должно быть!).
'next | N' (следующий раунд) Перезапустить переписываниепроцесс (начиная снова с первого правила перезаписи).На этот раз сопоставляемый URL-адрес больше не является исходным URL-адресом, а скорее URL-адресом, возвращаемым последним правилом перезаписи.Это соответствует команде Perl next или continue на C. Используйте этот флаг, чтобы перезапустить процесс перезаписи - чтобы сразу перейти к началу цикла. Будьте осторожны, чтобы не создавать бесконечный цикл!
'nocase | NC' (без регистра) Это делает шаблон нечувствительным к регистру, игнорируя разницу между 'AZ'и 'az', когда шаблон сопоставляется с текущим URL.'noescape | NE' (нет выхода из URI). Этот флаг не позволяет mod_rewrite применять обычные правила выхода из URI к результату перезаписи.Обычно специальные символы (такие как «%», «$», «;» и т. Д.) Экранируются в их эквиваленты в шестнадцатеричном коде («% 25», «% 24» и «% 3B» соответственно);Этот флаг предотвращает это.Это позволяет символам процента появляться на выходе, как в