- Директивы .htaccess
- По IP-адресам [ править ]
- В зависимости от реферера (ссылающейся страницы) [ править ]
- Удаление префикса «www.» из адреса [ править ]
- Индексные страницы [ править ]
- Переопределение индексного файла [ править ]
- Запрет на отображение содержимого каталога при отсутствии индексного файла [ править ]
- Типы файлов [ править ]
- Изменение обработчика по типу файла [ править ]
- Обработка ошибок [ править ]
- Кодировка [ править ]
- Отдаваемых файлов [ править ]
- Загружаемых файлов [ править ]
- Отдаваемых файлов конкретного типа [ править ]
- Управление доступом [ править ]
- Запрет доступа к файлам [ править ]
- Определение доступа по IP [ править ]
- Закрытие каталогов паролем [ править ]
- Конфигурирование сайта с помощью файла .htaccess
- Синтаксис .htaccess
- Примеры использования .htaccess
- Индексные страницы:
- Запрет на отображение содержимого каталога при отсутствии индексного файла
- Обработка кодов ответов Web-сервера Apache
- Выполнять код PHP в файлах HTML
- Задание кодировки файлов на сервере
- Задание кодировки загружаемых файлов
- Отключение директивы MultiViews
- Запрет доступа к файлам
- Запрет доступа к файлам из браузера
Директивы .htaccess
Следующие строки определяют, что все запросы, кроме запросов к файлам с расширениями .gif и .jpg, будут перенаправлены на файл index.php:
RewriteEngine On RewriteRule !.(gif|jpg)$ index.php
Работает только при наличии mod_rewrite.
По IP-адресам [ править ]
Если посетитель имеет IP-адрес 192.168.11.1, то ему будет открыта страница data.html:
SetEnvIf REMOTE_ADDR 192.168.11.1 REDIR="redir" RewriteCond % redir RewriteRule ^/$ /data.html
Если посетители имеют IP-адреса 192.168.11.1 и 192.168.11.2, то им будет открыт адрес http://example.com :
RewriteEngine on RewriteCond % (192.168.11.1|192.168.11.2) RewriteRule .* http://example.com [R=301,L]
Работает только при наличии mod_rewrite.
В зависимости от реферера (ссылающейся страницы) [ править ]
RewriteCond % http://example.com RewriteRule ^/original.html$ /another.html [L]
В данном случае все посетители пришедшие с сайта example.com вместо файла original.html получат файл another.html.
Удаление префикса «www.» из адреса [ править ]
Перенаправление с http://www.mydomain.com на http://mydomain.com :
RewriteEngine On RewriteBase / RewriteCond % ^www.mydomain.com$ [NC] RewriteRule (.*) http://mydomain.com/$1 [R=301]
Работает только при наличии mod_rewrite.
Индексные страницы [ править ]
Переопределение индексного файла [ править ]
DirectoryIndex index.html index.php index.shtml
Запрет на отображение содержимого каталога при отсутствии индексного файла [ править ]
Типы файлов [ править ]
Изменение обработчика по типу файла [ править ]
Пример переопределения HTML-файлов для обработки их с помощью PHP:
RemoveHandler .html .htm AddType application/x-httpd-php .php .htm .html .phtml
Обработка ошибок [ править ]
ErrorDocument 401 /401.html ErrorDocument 403 /403.html ErrorDocument 404 /404.html ErrorDocument 500 /500.html
При этом размер конечного файла должен быть больше 515 байт, иначе некоторые браузеры могут подменить страницу своей стандартной.
Кодировка [ править ]
Отдаваемых файлов [ править ]
AddDefaultCharset windows-1251
Загружаемых файлов [ править ]
CharsetSourceEnc windows-1251
Отдаваемых файлов конкретного типа [ править ]
AddCharset windows-1251 .js
Вместо .js можно указать несколько типов файлов, разделяя их пробелами.
Управление доступом [ править ]
Запрет доступа к файлам [ править ]
Запрет доступа ко всем файлам и каталогам в текущем каталоге:
Запрет доступа к определённому файлу:
Запрет доступа к файлам по маске:
Спецсимволы для определения маски:
Запрет доступа к файлам по регулярному выражению:
Определение доступа по IP [ править ]
Order deny,allow Deny from all Allow from 192.168.11.1
Строка order deny, allow определяет, в каком порядке следует выполнять директивы. Сначала выполняется директива запрета доступа, а затем разрешается доступ только для IP-адреса 192.168.11.1.
Order Allow,Deny Allow from all Deny from 192.140.170.219 Deny from 10.10.220.201
В этом примере наоборот запрещается доступ с определённых IP-адресов.
Закрытие каталогов паролем [ править ]
AuthName "Auth message" AuthType Basic require | user [username2] . [usernameN]> AuthUserFile "/full/path/to/.htpasswd"
Конфигурирование сайта с помощью файла .htaccess
Web — сервер Apache — это мощный и многофункциональный программный продукт с разнообразными возможностями. В данной статье будут расмотрены приёмы конфигурирования Apache, наиболее часто встречающиеся при разработке Web — сайтов.
Как известно, все настройки сервера Apache находятся в файлe httpd.conf, доступ к которому имеется не всегда. Например, если используется виртуальный сервер на хостинге, когда один сервер Apache обслуживает сотни сайтов, то, естественно, нельзя позволить владельцу одного сайта менять конфигурацию сервера, которая отразится на всех остальных сайтах. Тем не менее Web — сервер Apache допускает конфигурирование на уровне отдельных каталогов при помощи файлов .htaccess. Именно на работу с этими файлами, как единственными конфигурационными файлами, которые доступны большинству Web — разработчиков, и будет сделан основной упор в этой статье.
Файл .htaccess (с точкой в начале имени) – это конфигурационный файл, который даёт возможность настраивать работу сервера на уровне отдельных каталогов: устанавливать права доступа к файлам в каталогах, менять названия индексных файлов, самостоятельно обрабатывать коды ответов протокола HTTP, модифицировать адреса запрошенных страниц.
Примечание
Файл .htaccess может быть размещен в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами файлов .htaccess во вложенных каталогах).
Изменения, вносимые в файлы .htaccess, вступают в силу немедленно и не требуют перезагрузки сервера в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.
Для того, чтобы файлы .htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла httpd.conf, где должны быть прописаны директивы, которые разрешат файлу .htaccess переопределять конфигурацию Web-сервера в каталоге. Список этих директив задаётся директивой AllowOverride.
Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: AuthConfig, FileInfo, Indexes, Limit, Options, All, None
Для того чтобы дать директивам файлов .htaccess максимальные права на изменения директив, значение директивы AllowOverride в файле httpd.conf должно быть равно All. Оно является значением по умолчанию.
Запретить переопределение любых директив в конфигурационных файлах .htaccess можно при помощи значения None:
Замечание
Название конфигурационного файла можно изменить, и например, назвать его не .htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Изменение названия конфигурационного файла .htaccess не рекомендуется, т.к. это может усложнить дальнейшую поддержку сервера.
Синтаксис .htaccess
Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах .htaccess.
- Пути к файлам и каталогам должны указываться от корня сервера, например, /pub/articles/masters/php/
- При указании абсолютных url обязательно должны быть зааданы протоколы, например: Redirect / http://www.site.ru
- В файлах .htaccess недопустимы пробелы в указаниях путей к файлам и в названиях самих файлов, т.к. это приводит к генерации кода ответа 500 — ошибка конфигурации сервера: «Internal Server Error».
Примеры использования .htaccess
Индексные страницы:
Могут возникнуть ситуации, когда необходимо изменить состав индексных файлов, например, если нужна индексная страница index.php, а в основном конфигурационном файле httpd.conf она не прописана. Эту задачу можно решить при помощи файла .htaccess, в котором необходимо создать директиву DirectoryIndex, где будут перечислены имена индексных страниц:
DirectoryIndex index.php index.shtml index.html
При запросе каталога без указания имени файла сначала будет осуществлён поиск страницы с именем index.php. Если страницы с таким именем нет в каталоге, то аналогичные операции будут произведены с файлом index.shtml и т.д. до конца списка, пока не будет найдена и открыта соответствующая страница.
Запрет на отображение содержимого каталога при отсутствии индексного файла
Часто требуется запретить отображение списка файлов в каталоге, если не указан или отсутствует индексный файл. Например, запретить отображение содержимого каталога с изображениями. Если такой запрет не поставить, то пользователь, обратившийся напрямую к такому каталогу, получит список всех изображений.
Обработка кодов ответов Web-сервера Apache
Ни один сайт не затрахован от возникновения ошибок. Самой частой ошибкой является переход по ссылке на несуществующую страницу. В этом случае Apache генерирует код ответа 404 и отображает автоматически сгенерированную страницу с сообщением об ошибке. Наличие несуществующих страниц производит плохое впечатление на посетителей сайта. Это впечатление можно сгладить, если вместо стандартных страниц, подставлять собственные страницы с сообщением об ошибке. За назначение страниц — обработчиков кодов ответа протокола HTTP несёт ответственность директива ErrorDocument
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
После директивы ErrorDocument следует указать код ответа и страницу, на которую необходимо перенаправить посетителя при возникновении данного кода ответа.
- 401 ошибка — Запрос требует аутентификации пользователя (Unautorized).
- 403 ошибка — Доступ к запрашиваемому ресурсу запрещён (Forbidden).
- 404 ошибка — Запрашиваемый документ на сервере отсутствует (Not Found).
- 500 ошибка — Ошибка конфигурации сервера или внешней программы (Internal Server Error).
Выполнять код PHP в файлах HTML
Обычно PHP-код выполняется в файлах с расширениями php. Иногда возникают ситуации, когда необходимо выполнять PHP-код в файлах с другим расширением. В этом случае можно дать указание Web-серверу выполнять PHP-код не только в файлах с расширением php, но и в файлах с расширением html.
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
Первая строка удаляет обработчик файлов с расширениями html и htm, а вторая строка сообщает серверу о необходимости использовать для файлов с расширениями htm и html обработчик PHP
Задание кодировки файлов на сервере
Указанная кодировка отправляется браузеру в заголовке Content-Type и позволит браузеру клиента автоматически переключиться на требуемую кодировку.
Задание кодировки загружаемых файлов
При загрузке файлов на сервер можно указать, в какой кодировке сервер должен ожидать файл.
Отключение директивы MultiViews
Включённая на хостинге опция MultiViews может вызвать неожиданные проблемы, например, отображение несуществующих страниц сайта. Допустим, на сайте существует страница с адресом http://www.sait.ru/down.php , и если посетители обратятся к несуществующему каталогу http://www.sait.ru/down/ , то включённая опция MultiViews вместо этого каталога подставит файл down.php. Однако подстановка будет выполнена не полностью — пути к изображениям, таблицам стилей и т.п. будут подставлены неверно. То есть страница будет отображена с искажениями. Для подавления такого поведения Apache опцию MultiViews следует отключить.
Запрет доступа к файлам
Для того чтобы посетители не могли получить доступ к служебным файлам из окна браузера, можно запретить доступ к таким файлам. Для этого используется директива запрета Deny и разрешения доступа Allow.
Примечание
Использование директив Deny и Allow управляет только доступом к файлам из браузера, либо из другой программы-клиента. Подобные запреты не распространяются на скрипты сервера.
Запрет доступа к файлам из браузера
При использовании такой директивы будет запрещён доступ из браузера ко всем файлам и каталогам текущего каталога.