При чем тут реальные файлы?
При том, что здесь используется переменная $uri. Как я писал выше, если файл не найден, то УРЛ меняется на /index.php?q=$1 Повторюсь:
# Именнованная лакация (правило) location @modx { # выполняем подмену на index.php rewrite ^/(.*)$ /index.php?q=$1 last; }
Так как в большинстве случаев при ЧПУ файлов тупо нет, то постоянно и происходит подмена УРЛа на index.php. При этом и переменная $uri и принимает это значение. А если файл будет найден, то $uri не будет изменена, и будет иметь значение реально запрошенного адреса. Теперь понятно? Плагин конечно я тоже упростил. Изначально он был примерно такой:
$query = '/'; $query_str = str_replace('&', '&',($_SERVER['QUERY_STRING'])); if(!empty($query_vars['q'])){ $query .= $query_vars['q']; unset($query_vars['q']); } else{ $query .= 'index.php'; } $query .= "?"; $vars = array(); foreach($query_vars as $k => $v){ $vars[] = "{$k}={$v}"; } if($vars){ $query .= implode("&", $vars); } $modx->log(1, print_r($query, 1)); $modx->cacheManager->set($query , $modx->resource->_output);
И то, что сейчас в плагине осталось — это публичный упрощенный вариант, для которого твои замечания очень обоснованный. Но для меня мой nginx-конфиг более актуальный :-)