Синтаксис и возможности .htaccess
.htaccess (с точкой в начале имени) - это файл, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Он позволит вам: устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок.
Это достаточно удобно в случае, когда Вам необходимо переопределить управляющие директивы WEB-сервера для конкретного каталога или сайта (если на WEB-сервере несколько сайтов) и не хочется менять установки для всех остальных. А так же в случаях, когда у Вас нет доступа к файлу httpd.conf.
Файл .htaccess может быть размещен в любом каталоге. Директивы этого файла действует на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess). Для того, что бы эти файлы .htaccess можно было использовать - необходимы соответствующие настройки главного конфигурационного файла. Большинство хостеров разрешают использовать настройки в файле .htaccess, а если не позволяют, то скорей всего вы взяли очень дешевый пакет с минимумом возможностей, или вы попали к самому плохому хостеру.
Допустимые директивы в .htaccess
Пути к файлам и директориям должны указываться от корня сервера, например, /pub/home/server/html/
Если вы не знаете путь от корня сервера, то Вы можете его узнать, спросив у администратора сервера, либо можете посмотреть сами, запустив на сайте функцию PHP - phpinfo(). Вам необходимо найти переменную doc_root и посмотреть ее значение - это будет путь от корня сервера до Вашей основной директории. В именах доменов обязательно должны быть указаны протоколы, например:
Redirect / http://www.test-page.ru
Глобальное перенаправление (редирект) на другой адрес:
Redirect / http://www.test-page.ru
Перенаправление (редирект) только при запросе определенных страниц:
redirect /data http://test-page.com/data
redirect /forum http://test-page.com/forum
При запросе страниц из каталогов data и forum будет произведено перенаправление на новые адреса.
Перенаправление всех запросов кроме .gif и .jpg:
RewriteEngine On
RewriteRule !.(gif|jpg)$ index.php
Все запросы кроме запросов к файлам с расширениями .gif и .jpg будут перенаправлены на файл index.php
Перенаправление (редирект) только посетителей с определенным IP-адресом:
SetEnvIf REMOTE_ADDR 192.168.11.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /data.html
Если посетитель имеет IP-адрес 192.168.11.1, то ему будет открыта страница data.html.
Изменение названия индексной страницы:
DirectoryIndex index.html index.php index.shtml
Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.
Выполнять код PHP в файлах HTML
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
Добавив эти строки в .htaccess вы дадите директиву серверу выполнять инструкции PHP не только в файлах с расширением *.php и *.phtml, но и в файлах с расширением *.htm и *.html. Также можно добавить туда любые другие расширения файлов, к примеру .code или .kot, такие хитрости иногда могут сбить с толку хакера, который пытается взломать ваши скрипты.
Обработка ошибок Apache
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
При возникновении этих ошибок посетитель будет перенаправлен на специально созданные страницы.
401 ошибка - Требуется авторизация (Authorization Required).
403 ошибка - пользователь не прошел аутентификацию, доступ запрещен (Forbided).
404 ошибка - Документ не найден (Not Found).
500 ошибка - Внутренняя ошибка сервера (Internal Server Error).
Запрет на отображение содержимого каталога (если в папке нет index.php или index.html)
Options -Indexes
Определение кодировки, в которой сервер посылает страницы пользователю
AddDefaultCharset utf-8
Определение кодировки на загружаемые файлы
CharsetSourceEnc windows-1251
или
CharsetSourceEnc utf-8
Запрет доступа ко всем файлам
deny from all
Запрещен доступ ко всем файлам и каталогам в текущей директории.
Разрешить доступ только с определенного 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.
Запретить доступ с определенного IP-адреса
deny from 192.168.11.1
Запретить доступ к определенному файлу
<Files config.php>
deny from all
</Files>
Запрещен доступ посетителей к файлам config.php. Этот запрет не действует на скрипты web-сервера. Они по прежнему будут иметь доступ к этому файлу.
Запретить доступ к файлам с определенным расширением
<Files "*.ini">
deny from all
</Files>
Здесь запрещен доступ к файлам с расширением *.ini. Директива, при указании имени файлов, позволяет использовать подстановочные символы.
? - любой одиночный символ
* - любая последовательность символов, исключая символ / (слеш)
Запретить доступа к файлам с несколькими типа расширений
<Files ~ ".(inc|conf|cfg|pass)$">
deny from all
</Files>
Запрещен доступ к файлам с расширением *.inc, *.conf, *.cfg, *.pass. Хотя директива, по умолчанию, не работает с регулярными выражениями, но их можно включить, поставив символ тильды (~) в опциях директивы. Синтаксис следующий:
[тильда] [пробел] [далее_все_без_пробелов]
Установка пароля на директорию
AuthName "Admin page"
AuthType Basic
AuthUserFile /pub/home/server/.pass
require valid-user
</Files>
Рекомендуем почитать