Большое спасибо за эту подсказку: журнал объясняет все о процессе, сопровождаемом переписыванием!Приятно видеть, что условия проверяются после совпадения правила ... даже если многопоточный доступ к файлу журнала делает его похожим на миску спагетти.
Вот правила, которые я использовал:
RewriteCond %{REQUEST_URI} !/config/([^\.]+/)*[a-z\.^/]+$
RewriteRule ^([a-z]+)/([^\.^/]+)$ index.php?c=$1&i=$2 [L]
RewriteCond %{REQUEST_URI} !/config/([^\.]+/)*[a-z\.^/]+$
RewriteRule ^admin/([a-z]+)/([^\.^/]+)$ admin.php?c=$1&i=$2 [L]
RewriteCond %{REQUEST_URI} /config/([^\.]+/)*[a-z\.^/]+$
RewriteRule /config/(([^\.]+/)*[a-z\.^/]+)$ config/$1 [L]
Я начал с проверки URL-адреса с конца, а не с начала, поскольку эти правила затем можно применить в подкаталоге root.Я разрешил вызывать подкаталоги в каталоге config.Последнее правило является реентерабельным, но избегайте другого переписывания, если правила применяются в корневом каталоге.Если нет, выражение не совпадает, и правило применяется для создания выходных данных, идентичных входным данным.
В общем случае невозможно избежать повторного применения сервером правил перенаправления к ранееперенаправленный URI.Документация говорит о том, что для этого есть флаг [END], но я не смог успешно применить это на практике ... Таким образом, для меня все правила htaccess должны быть реентерабельными.