Перенаправление запросов в файл index.php

Чтобы реализовать модель MVC в нашем приложении, воспользуемся классом Zend Controller. Прежде всего необходимо изменить конфигурацию веб-сервера таким образом, чтобы все запросы к страницам перенаправлялись в класс Zend_Controller, даже если запрашиваемая страница не является реальным фай­лом в нашей файловой системе. Запросы к файлам, которые действительно суще­ствуют (например, файлы изображений или стилей CSS), будут обрабатываться сервером Apache как обычно, а вот все остальные запросы отправятся на обработку в главный файл приложения (по адресу /vaг/www/phpweb2 0 /htdocs / index. php).

Директивы из листинга 2.3 следует поместить в файл . ht ас cess, находящийся в каталоге . /htdocs. Следует заметить, что их можно было бы включить в файл httpd. conf, созданный нами ранее, но лучше сделать это здесь, чтобы можно было вносить изменения, не перезапуская веб-сервер. Директива Rewrit eRule в листин­ге 2.3 перенаправляет любой запрос, не соответствующий реальному файлу или каталогу, на обработку файлу index. php.

Примечание

Директива AllowOverride в созданном ранее конфигурационном файле позволяет вносить изменения в конфигурацию в файле .htaccess.

Листинг 2.3. Перенаправление запросов к веб-сайту через файл index.php (команды из файла .htaccess)

RewriteEngine on

RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d

RewriteRule A(.*)$ index.php/$1_____________________________________

Первая строка в листинге 2.3 разрешает режим mod_rewrite для каталога, в ко­тором расположен файл . htaccess (включая подкаталоги).

Вторая и третья строки устанавливают условия перезаписи запроса в in­dex.php. Во второй строке написано: «если запрашиваемый файл не соответствует какому-либо файлу из корневого каталога веб-сайта, то использовать правило пе­резаписи». В третьей строке написано то же самое, но в отношении каталогов.

Последняя строка выполняется, если ни одно из двух условий не истинно. За­прашиваемое имя файла сообщается файлу index.php путем добавления его в строку запроса.