Htaccess перенаправляет все запросы в index.php, кроме подпапки

У меня есть CMS, установленная в корне моего домена со следующим htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Это поможет дружественным URL-адресам перенаправить все на index.php. Моя проблема в том, что у меня есть подпапка с другим cms. Мне нужно, чтобы запросы в подпапку были перенаправлены в соответствующую папку, а не index.php.

Я попробовал следующее, но он не работает

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(sub-folder)
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Может ли кто-нибудь помочь?

Спасибо

Ответ 1

Вы должны правильно проверить, если запрос uri соответствует подпапке

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !/subfolder
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

В любом случае первые две записи rewritecond означают: если имя файла запроса не является файлом или каталогом. Это означает, что если файл, на который вы ссылаетесь, находится в подпапке, а подпапка находится в вашем docroot, вам ничего не нужно делать.

Если все еще не будет работать, включение журнала может помочь вам:

RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

избежать этого журнала в процессе производства

Использование большого значения для уровня значительно замедлит ваш сервер Apache! Используйте файл журнала перезаписи на уровне выше 2 только для отладки!