ОК, поэтому RewriteRule, удаляющий строку запроса, будет работать без перенаправления.
Проблема (я подозреваю) в том, что Zend_Cache_Backend_Static использует $ _SERVER ['REQUEST_URI'] где-то вдоль строки и поэтому получаетдоступ к оригинальному имени файла.Мои знания о mod_rewrite довольно невелики, и я не осознавал, что это значение не изменилось.
Итак, чтобы предотвратить создание файлов и каталогов с помощью массивных строк запросов, мне пришлось сделать следующие вещи:
Во-первых, для стандартных строк запроса:
Обрезать строку запроса в начале моего mod_rewrite без перенаправления:
RewriteCond %{QUERY_STRING} \S
RewriteRule [^\?]+ /$0?
В моем index.php я тогдаизменив $ _SERVER ['REQUEST_URI'] для соответствия перенаправлению, удалив строку запроса, что означает, что мне больше не нужно взламывать ZF:
$queryIndex = strpos($_SERVER['REQUEST_URI'], '?');
if($queryIndex !== false) {
$_SERVER['REQUEST_URI'] = substr($_SERVER['REQUEST_URI'], 0, $queryIndex);
}
Это теперь предотвратит ЛЮБУЮ строку запроса отинтерпретируется моим заявлением.Поэтому для передачи переменных на страницы я использую параметры пути URL Zend Framework.Чтобы они не создавали чрезмерно глубоких папок кеша, я заменил маршрут по умолчанию на несколько очень четко определенных маршрутов в Bootstrap:
$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$route = new Zend_Controller_Router_Route(
':module/:controller/:action',
array(
'module' => 'default',
'controller' => 'index',
'action' => 'index'
)
);
$router->addRoute('default', $route);
$route = new Zend_Controller_Router_Route(
'article/:alias',
array(
'module' => 'default',
'controller' => 'article',
'action' => 'index',
'alias' => ''
)
);
$router->addRoute('article', $route);
Здесь я заменил маршрут по умолчанию, поэтому никаких дополнительных параметров нет.разрешены.Поэтому любые действия, которые требуют параметров, должны быть явно установлены, например, на моем втором маршруте.Это означает, что потенциально может быть много определенных маршрутов.К счастью, в моем конкретном приложении это не так.
Способ ограничения ограничений маршрутов и предоставления некоторых параметров GET через URL-пути ZF состоит в том, чтобы установить ограничение на количество слешей в REQUEST_URI, эффективно ограничиваямаксимальная глубина каталога статического кэша страниц (10 ниже).Это также может быть изменено в index.php:
if(substr_count($_SERVER['REQUEST_URI'], '/') > 10) {
preg_match_all("/\//", $_SERVER['REQUEST_URI'] ,$capture, PREG_OFFSET_CAPTURE);
$_SERVER['REQUEST_URI'] = substr($_SERVER['REQUEST_URI'], 0, $capture[0][9][1]);
}