Когда мы говорили о типичных структурах каталогов, мы упомянули файл
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
.
Запрашиваемый 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 |