mod_rewrite и зацикливание

Tigr

Новичок
Всем, привет.

1) RewriteRule ^catalog/([0-9]+)/?$ view.php?id=$1 [L]

2) RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule ^view.php$ catalog/%1/? [R=301,L]

По отдельности 1 и 2 работают
При совмещении происходит зацикливание.

Почему? Интересует чисто теоретически, поэтому не спрашивайте зачем так сделано.

По идее когда запрашивается страница вида: view.php?n=3, то по правилам 2 происходит 301 редирект на /catalog/3/, а этот запрос уже схватывает правило 1. Опять же по идее оно должно отдать запрос скрипту view.php и закончить на этом.

Но этого не происходит. После редиректа циклически происходит вызов /catalog/3/ с ответом 301

Что я упустил?
 

freeek

Новичок
ну все верно,

1) приходит запрос на view.php?n=3 - срабатывает 2е правило и формирует /catalog/3/
2) /catalog/3/ хватает правило 1 и формирует view.php?n=3
3) 1)
4) 2)
5) 1)
6) 2)

....
 

Tigr

Новичок
Да, так происходит по факту, НО правило один [L], т.е. при совпадении закончить тем, что отдать запрос скрипту view.php, без перенаправления (редиректа).

Почему не выполняется view.php, а происходит редирект из правила 2 (т.е. 301)?
 

freeek

Новичок
так а ты не думаешь, что создается новое обращение к серверу и правила обрабатываются заново?

RedirectMatch ^.*\.htm(l)? /myalias.php
RedirectMatch ^/.*alias.* /her.php

если мы впишем такое правило, то также остановимся на том что будет последним в цепочке, т.е. на /her.php
 
Сверху