Вопрос непосредственно modx не касается, но, возможно, в описанном поведении виноват именно он, возможно, нет.
В файле .htaccess у всех прописаны следующие директивы:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Что здесь происходит — всем понятно.
Предположим, на уровне Apache необходимо выполнить внутренний редирект с URI test.html на resource0.html (пример сильно упрощён, чтобы можно было сосредоточиться на проблеме).
Решить задачу можно 2 способами:
1.Перед стандартным редиректом modx (index.php?q=$1) прописать директивы:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^test\.html$ resource0.html [QSA]
Здесь флаг [L] мы не ставим, чтобы после нашего редиректа сработал стандартный редирект modx (index.php?q=$1)
2.Перед стандартным редиректом modx (index.php?q=$1) прописываем общий редирект с test.html на index.php?q=resource0.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^test\.html$ index.php?q=resource0.html [L,QSA]
Здесь указываем флаг [L], хотя и не обязательно, т.к. стандартный редирект modx после этого редиректа так и так не сработает.
Итог:
В обоих случаях получаем редирект на нужную нам страницу (resource0.html), но редирект выполняется внешний, а не внутренний. Почему ?
P.S. Для воспроизведения описанной ситуации достаточно изменить site.ru на имя своего сайта, resource0.html — на URI любого существующего ресурса.