.htaccess

Материал из свободной русской энциклопедии «Традиция»
Перейти к: навигация, поиск

.htaccess — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), не предоставляя доступа к главному конфигурационному файлу, таких как управляемый доступ к каталогам, переназначение типов файлов и т. д.

.htaccess является подобием httpd.conf, с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess в том или ином каталоге указывается в httpd.conf .

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

Пути к файлам и каталогам должны указываться от корня сервера, например, /pub/home/server/html/

Директивы .htaccess[править]

Перенаправление (редирект)[править]

На другой адрес[править]

Redirect / http://www.example.com

При запросе определенных страниц[править]

redirect /data http://www.expample.com/data 
redirect /forum http://forum.example.com 

По маске имени файла[править]

Следующая строки определяют, что все запросы кроме запросов к файлам с расширениями .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} redir 
RewriteRule ^/$ /data.html

Работает только при наличии mod_rewrite

Удаление префикса «www.» из адреса[править]

Перенаправление с http://www.mydomain.com на http://mydomain.com

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.mydomain.com$ [NC]
RewriteRule (.*) http://mydomain.com/$1 [R=301]

Работает только при наличии mod_rewrite

Индексные страницы[править]

Переопределение индексного файла[править]

DirectoryIndex index.html index.php index.shtml

Запрет на отображение содержимого каталога при отсутствии индексного файла[править]

Options -Indexes

Типы файлов[править]

Изменение обработчика по типу файла[править]

Пример переопределения 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 можно указать несколько типов файлов, разделяя их пробелами.

Управление доступом[править]

Запрет доступа к файлам[править]

Запрет доступа ко всем файлам и каталогам в текущем каталоге

deny from all

Запрет доступа к определенному файлу

<Files config.php>
  deny from all 
</Files>

Запрет доступа к файлам по маске

<Files ~ "*.inc">
  deny from all 
</Files>

Спецсимволы для определения маски

? - любой одиночный символ
* - любая последовательность символов, исключая символ / (слэш)

Запрет доступа к файлам по регулярному выражению

<Files ~ "*f?a.(inc|conf|cfg)">
  deny from all 
</Files>

Определение доступа по IP[править]

order deny,allow 
deny from all 
allow from 192.168.11.1 

Строка order deny,allow определяет, в каком порядке следует выполнять директивы. Сначала выполняется директива запрета доступа, а затем разрешается доступ только для IP-адреса 192.168.11.1. Если в первой строке поменять порядок следования директив на order allow,deny, то доступ для данного IP-адреса не будет открыт, так как директива deny, выполняемая последней перекроет действия директивы allow.

Закрытие каталогов паролем[править]

файл .htaccess

AuthName "Auth message"
AuthType Basic
require <valid-user | user <username1> [username2] ... [usernameN]>
AuthUserFile "/full/path/to/.htpasswd"

Пароли хранятся в файле .htpasswd