Все мои правила перезаписи настроены и работают в .htaccess, но мне нужно перенаправить все несопоставимые правила в общее место.
Вот правила:
# add trailing slash
RewriteCond %{DOCUMENT_ROOT} -d
RewriteRule ^([^.]*[^/])$ $1/ [R]
# redirect directories to old site if it exists
RewriteCond %{DOCUMENT_ROOT}/old_site/$0 -d
RewriteRule ^(.*) old_site/$1 [NC,QSA,L]
#redirect files to old site if they exist
RewriteCond %{DOCUMENT_ROOT}/old_site/$0 -f
RewriteRule ^(.*) old_site/$1 [NC,QSA,L]
Это прекрасно работает, но при попытке перенаправить оставшуюся часть трафика (все несопоставленные правила) в index.php просто перезаписывает все приведенные выше правила:
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Как я могу гарантировать, что эта часть будет выполнена только в том случае, если ничто другое (я полагаю, кроме завершающей части косой черты) не было найдено?
EDIT:
Согласно @Jon Lin, я изменил последние три строки на
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php
Что теперь работает для всего, кроме каталогов, которые не заканчиваются косой чертой. Я не могу поместить [L] в первое правило, потому что мне нужно, чтобы оно переписало дальше в другой каталог.