Я хотел бы задать вопрос, чтобы понять, как процессы Apache переписывают правила, указанные в файле .htaccess.
На моем сайте я использовал классическую организацию страниц по категориям, каждая категория имела большечем один раздел:
http://www.mysite.com/category/section.html.
Однако нет html-страниц, все обрабатывается кодом в pages.php.Используя простое правило перезаписи, URL-адреса, подобные приведенному выше, отображаются на:
http://www.mysite.com/pages.php?cat=category&page=section
Я решил переименовать раздел с section1 на section1-xxx .Чтобы обслуживать запросы на старое имя (section1), я добавил простое правило для сопоставления section1.html на section1-xxx.html .
ПервоеПравила, которые я добавил в .htaccess, были следующими:
R1
RewriteRule ^CAT1/section1.html$ CAT1/section1-xxx.html [NC]
, где CAT1 - название категории.
R2
RewriteRule ^CAT1/(.*).html$ pages.php?cat=CAT1&page=$1 [L,NC]
Моя идея заключалась в том, чтобы применить R1, а затем R2.Однако, когда эти правила применяются, я получаю необъяснимый (для моего мозга) URL.
Когда запрашивается следующая страница
http://www.mysite.com/CAT1/section1.html
, URL сначала преобразуется в
http://www.mysite.com/CAT1/section1-xxx.html/section1.html
затем в
http://www.mysite.com/pages.php?cat=CAT1&page=section1-xxx.html/section1
Из любопытства я добавил L (флаг) к правилу R1:
RewriteRule ^CAT1/section1.html$ CAT1/section1-xxx.html [L,NC]
и всеработал нормально.Теперь http://www.mysite.com/CAT1/section1.html обслуживается через:
http://www.mysite.com/pages.php?cat=CAT1&page=section1-xxx
Теперь вопросы:
- Почему я получил этот URL перед добавлением флага L Правило R1?
- Флаг L должен указывать на применение правила сопоставления, а затем прекратить использование других правил.Однако с установленным флагом L применяются значения R1 и R2 .Почему?
Спасибо за ваше время.
С уважением, A.