A free and open-source book on ZF3 for beginners


2.7. Файл доступа к гипертексту (.htaccess)

Когда мы говорили о типичных структурах каталогов, мы упомянули файл APP_DIR/public/.htaccess. Теперь попробуем понять, что же он делает.

Файл .htaccess (доступ к гипертексту - hypertext access) - это файл конфигурации веб-сервера Apache, позволяющий переопределять некоторые глобальные настройки веб-сервера. Файл .htaccess - это конфигурация на уровне каталога, то есть, он влияет только на принадлежащий ему каталог и все его подкаталоги.

Содержимое файла .htaccess представлено ниже:

RewriteEngine On
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting or installed the project in a subdirectory,
# the base path will be prepended to allow proper resolution of
# the index.php file; it will work in non-aliased environments
# as well, providing a safe, one-size fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}/index.php [L]

Строка 1 говорит веб-серверу Apache включить движок перезаписи URL (mod_rewrite). Движок перезаписи изменяет входящие URL-запросы в зависимости от правил регулярных выражений. Это позволяет вам связать произвольные URL с вашей внутренней структурой URL любым образом.

Строки 4 - 7 определяют правила перезаписи, которые сообщают веб-серверу, что, если клиент (то есть, браузер) запрашивает файл, который существует в корневом каталоге документов, то следует вернуть содержимое этого файла как HTTP-ответ. Так как у нас есть каталог public внутри корневого каталога документов виртуального хоста, мы позволяем посетителям сайта видеть все файлы в каталоге public, включая index.php, CSS-файлы, JavaScript-файлы и файлы изображений.

Строки 14 - 16 определяют правила перезаписи, которые сообщают Apache, что необходимо делать, если пользователь запрашивает файл, которого не существует в корневом каталоге документов. В этом случае пользователя следует перенаправить на index.php.

Таблица 2.1 содержит несколько примеров перезаписи URL. Первый и второй URL указывают на существующие файлы, поэтому mod_rewrite возвращает путь к запрашиваемому файлу. URL в третьем примере указывает на несуществующий файл htpasswd (это может быть признаком хакерской атаки), и, согласно правилам перезаписи, движок возвращает файл index.php.

Таблица 2.1. Примеры перезаписи URL
Запрашиваемый URL Перезаписанный URL
http://localhost/index.php Файл существует; возвращается локальный файл APP_DIR/public/index.php
http://localhost/css/bootstrap.css Файл существует; возвращается локальный файл APP_DIR/public/css/bootstrap.css
http://localhost/htpasswd Файл не существует; вместо этого возвращается файл APP_DIR/public/index.php

Top