Волшебный файл.htaccess. htaccess - Применение и синтаксис
Htaccess (с точкой в начале имени) – это файл, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок.
Как известно, конфигурационные директивы сервера Apache находятся в файлe httpd.conf. Но далеко не всегда у Вас будут права доступа к этому файлу. Например, если Вы используете для хостинга виртуальный сервер, когда один сервер Apache обслуживает множество сайтов, то, естественно, Вам никто не позволит менять его конфигурацию. Но, тем не менее, вы можете конфигурировать работу сервера в своих директориях. И делать вы это можете с помощью файлов.htaccess.
Файл.htaccess может быть размещен в любом каталоге. Директивы этого файла действует на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов.htaccess).
Изменения, вносимые в файлы.htaccess, вступают в силу немедленно и не требуют перезагрузки сервера, в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.
Настройки httpd.conf, разрешающие применение файлов.htaccess
Для того, что бы эти файлы.htaccess можно было использовать - необходимы соответствующие настройки главного конфигурационного файла. В файле httpd.conf должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию web-сервера в каталоге. Эта директива называется AllowOverride. Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.
Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options .
Для того чтобы дать директивам файлов.htaccess максимальные права следует прописать в httpd.conf:
AllowOverride All
Примечание
При желании название конфигурационного файла можно изменить, и например, назвать его не.htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Но все же рекомендуется этого не делать.
Синтаксис.htaccess
Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах.htaccess.
- Пути к файлам и директориям должны указываться от корня сервера, например, /pub/home/server1/html/
Если вы не знаете путь от корня сервера, то Вы можете его узнать, спросив у администратора сервера, либо можете посмотреть сами, запустив на сайте функцию PHP - phpinfo(). Она выведет на экран конфигурацию PHP в виде фиолетовых таблиц. В них Вам необходимо найти переменную doc_root и посмотреть ее значение - это будет путь от корня сервера до Вашей основной директории.
- В именах доменов обязательно должны быть указаны протоколы, например:
Примеры использования.htaccess
Глобальное перенаправление (редирект) на другой адрес:
Redirect / http://www.newsite.ru
Перенаправление (редирект) только при запросе определенных страниц:
Redirect /company http://www.newsite.com/newcompany
redirect /forum http://www.newsite.com/newforum
При запросе страниц из каталогов company и forum будет произведено перенаправление на новые адреса.
Перенаправление (редирект) только посетителей с определенным IP-адресом:
SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html
Если посетитель имеет IP-адрес 192.145.121.1, то ему будет открыта страница only_for_you.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.
Обработка ошибок 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).
Запрет на отображение содержимого каталога при отсутствии индексного файла
Options –Indexes
Определение кодировки, в которой сервер "отдает" файлы
AddDefaultCharset windows-1251
Определение кодировки на загружаемые файлы
CharsetSourceEnc windows-1251
Запрет доступа ко всем файлам
Deny from all
Запрещен доступ ко всем файлам и каталогам в текущей директории.
Разрешить доступ только с определенного IP-адреса
Order deny,allow
deny from all
allow from 195.135.232.70
Строка order deny,allow определяет, в каком порядке следует выполнять директивы. Сначала выполняется директива запрета доступа, а затем разрешается доступ только для IP-адреса 195.135.232.70. Если в первой строке поменять порядок следования директив на order allow,deny, то доступ для данного IP-адреса не будет открыть, так как директива deny, выполняемая последней перекроет действия директивы allow.
Полная поддержка директив.htaccess прилагается...
Пролонгации домена 199-00 руб
Этот материал один из важнейших, поэтому рекомендую уделить ему особое внимание.
В регулярном выражении можно использовать любые печатные символы и пробел, но часть символов имеет особое значение:
Круглые скобки () используются для выделения групп символов.
Символ ^ обозначает начало строки.
Символ $ обозначает конец строки.
Символ. обозначает любой символ.
Символ | обозначает альтернативу. Например, выражения "A|B" и "(ABC|DEF)" означают "A или B" и "ABC или DEF" соответственно.
Символ? ставится после символа (или группы символов), который может как присутствовать, так и отсутствовать. Например, выражению "jpe?g" подойдет и строка "jpg", и строка "jpeg". Пример выражения с группой символов: "super-(puper-)?site".
Символ * ставится после символа (или группы символов), который может отсутствовать или присутствовать неограниченное число раз подряд. Например, выражению "jpe*g" подойдут строки "jpg", "jpeg" и "jpeeeeeeg".
Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз. Например, выражению "jpe+g" подойдут строки "jpeg" и "jpeeeeg", но не "jpg".
Квадратные скобки используются для перечисления допустимых символов. Например, выражение "" равносильно выражению "a|b|c", но вариант с квадратными скобками обычно является более оптимальным по быстродействию. Внутри скобок можно использовать диапазоны: например, выражение "" равносильно выражению "". Если символы внутри квадратных скобок начинаются с символа ^, это означает любой символ, кроме перечисленных в скобках. Например, выражение "[^0-9]+" означает строку из любых символов, кроме цифр.
Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде. Например, выражению "jpe\+g" соответствует только одна строка "jpe+g".
{3,9} - фигурные скобки означают диапозон количества символов, в данном случае допускается от 3 до 9 символов, длина строки из символов должна быть равна или более 3 равна или менее 9 символов. Применяется в основном . Пример, проверяем строку HTTP запроса отправленную браузером серверу на предмет совпадения ее содержания определенному шаблону:
♳ RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/
♴ предположим что мы запросили индексную сраницу на сервере %{THE_REQUEST} = «GET /index.html HTTP/1.1»
♵ в таком случае мы читаем исходную строку содержащую фигурные скобки так "начало_полученных_данныхGETпробел/index.phpпробелHTTP/"
♶ т.е. может быть "GET", а может быть "POST" могут быть и другие значения... просто символы, в зависимости от того чем и как мы запросим файл index.php на сервере.Все, что расположено после символа "#", считается комментарием.
Еще раз повторюсь, что для дальнейшего успешного понимания описания, примеров.htaccess и его настройки, данная информация просто необходима!!!
Недавно освободившиеся домены с PR и ТИЦ:
Сервис http://reg.ru - крупнейшего хостинга и регистратора доменов позволяет подать заявку на регистрацию доменного имени, которое недавно было освобождено прежним Администратором. Освобожденные домены часто имеют высокие показатили ТИЦ и PR и могут быть интересны к приобретению.
Освобожденные домены.RU c ТИЦ:
|
Свободные премиум-домены:
|
Объем информации: 5805 bytes
165
В среде веб-программирования нередко используется файл.htaccess при хостинге сайтов под управлением сервера Apache. Это очень полезный файл, позволяющий определять неопределенные или переопределять определенные в httpd.conf или apache.conf опции для конкретного сайта иди директории этого сайта.
Файл действует на текущую директорию (где он лежит) и на все директории "ниже", т.е. все дочерние директории, если только в них не определен свой файл.htaccess.
В этой статье я изложу ряд наиболее часто применяемых возможностей этого файла. Конечно, здесь не все описано, многое Вы можете почерпнуть из просторов интернета, однако наиболее часто встречающиеся вопросы освещены.
Правила написания
Директивы файла указываются по одной на строку.
Все пути начинаются от корня сайта (не от корня файловой системы сервера!)
Например, если нужный файл на сервере лежит по пути /var/www/mysite.ru/mydir/file.html, то правильным будет путь /mydir/file.html
Если выполняется указание url, то указание происходит обязательно с использованием указания протокола.
Например, если идет перенаправление на сайт www.mysite.ru, то указывать необходимо http://www.mysite.ru
Коментарии - все, что находится после символа #
В выражениях можно использовать переменные окружения. Список наиболее часто используемых - ниже.
Наконец, при внесении изменений в файл - они сразу начинают действовать. Перезагружать ничего не надо.
Переменные окружения
Хотя и не часто, но все-же в файле.htaccess могут использоваться переменные окружения. Некоторые из них приведены ниже (спасибо сайту htaccess.net.ru):
- QUERY_STRING (параметры запроса)
- REMOTE_ADDR (IP-адрес посетителя)
- REMOTE_HOST (имя хоста посетителя)
- REMOTE_USER (имя пользователя, если он прошел аутентификацию)
- REMOTE_METHOD (метод браузера - GET или POST)
- PATH_INFO (путь к файлу веб-страницы)
- HTTP_USER_AGENT (содержимое заголовка user-agent - тип браузера)
- HTTP_REFERER (содержимое заголовка referer)
- HTTP_COOKIE (содержимое заголовка cookie)
- HTTP_HOST (имя хоста веб-сайта)
- TIME_YEAR (год, месяц и т.д.)
- TIME_MONTH
- TIME_DAY
- TIME_HOUR
- TIME_MIN
- TIME_SEC
- TIME_WDAY
- REQUEST_URI (запрашиваемый URL)
- REQUEST_FILENAME (запрашиваемый файл)
- THE_REQUEST (полностью запрос)
Регулярные выражения в.htaccess
В этом файле можно использовать регулярные выражения. Их синтаксис приведен ниже. Спасибо сайту htaccess.net.ru
В регулярном выражении можно использовать любые печатные символы и пробел, но часть символов имеет особое значение:
- Круглые скобки () используются для выделения групп символов.
- Символ ^ обозначает начало строки.
- Символ $ обозначает конец строки.
- Символ. обозначает любой символ.
- Символ | обозначает альтернативу. Например, выражения "A|B" и "(ABC|DEF)" означают "A или B" и "ABC или DEF" соответственно.
- Символ? ставится после символа (или группы символов), который может как присутствовать, так и отсутствовать. Например, выражению "jpe?g" подойдет и строка "jpg", и строка "jpeg". Пример выражения с группой символов: "super-(puper-)?site".
- Символ * ставится после символа (или группы символов), который может отсутствовать или присутствовать неограниченное число раз подряд. Например, выражению "jpe*g" подойдут строки "jpg", "jpeg" и "jpeeeeeeg".
- Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз. Например, выражению "jpe+g" подойдут строки "jpeg" и "jpeeeeg", но не "jpg".
- Квадратные скобки используются для перечисления допустимых символов. Например, выражение "" равносильно выражению "a|b|c", но вариант с квадратными скобками обычно является более оптимальным по быстродействию. Внутри скобок можно использовать диапазоны: например, выражение "" равносильно выражению "". Если символы внутри квадратных скобок начинаются с символа ^, это означает любой символ, кроме перечисленных в скобках. Например, выражение "[^0-9]+" означает строку из любых символов, кроме цифр.
- Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде. Например, выражению "jpe\+g" соответствует только одна строка "jpe+g".
- Все, что расположено правее # - считается комментарием.
Как включить
В Linux (LAMP) в конфигурации Apache использование файла.htaccess, как правило, уже разрешено. Во FreeBSD может потребоваться особо разрешить использование этого файла директивой AllowOverride в глобальной конфигурации или в конфигурации конкретного сайта.
AllowOverride All
Запрет на чтение всех файлов в директории
Доступ с определенного IP адреса
oder deny,allow
deny from all
allow from 192.168.0.1
allow from 192.168.0.2
где вместо 192.168.0.1, 192.168.0.2 указываются IP адреса, с которых пользователям можно заходить на сайт. Иначе - ошибка 403.
Запрет на доступ с определенных IP адресов
order allow,deny
allow from all
deny from 192.168.0.1
deny from 192.168.0.2
Где вместо указанных IP необходимо указывать те, доступ с которых закрыт.
Запрет доступа к файлам по маске
order allow,deny
deny from all
Вместо ext1, ext2, ext3... вставляем свои расширения. Правила запрета/доступа определяются так-же, как и для всей директории в целом.
Как частный случай - можно задать доступ для одного конкретного файла (правда, с учетом наследственности прав.htaccess - этот доступ или запрет распространится на все под-директории - т.е. на все файлы в этой директории и всех директориях ниже):
order allow,deny
deny from all
Паролирование директории
Часто используется при создании веб-сайтов, доступ к которым (или к части которых) разрешен не всем. При попытке открытия этого url веб-браузер запросит у пользователя логин и пароль.
AuthName "Введите пароль для доступа"
AuthType Basic
AuthUserFile /var/www/mysite.ru/.htpasswd
require valid-user
ВНИМАНИЕ! Заметьте, что здесь путь к файлу.htpasswd указывается от корня файловой системы сервера, не сайта!
Для использования данного способа следует иметь файл.htpasswd. Как его создать и пользовать - рассказано на этом же сайте в разделе веб. Приведем пример создания этого файла:
# htpasswd -c /var/www/mysite.ru/.htpasswd username password
Если ключ -c не указывать - утилита htpasswd не создаст файл заново, а добавить пользователя username к уже существующим.
Следует учесть, что при данном способе аутентификации логин и пароль передаются в открытом текстовом виде, потому рекомендуется использовать протокол HTTPS/SSL.
Как частный случай эту конструкцию можно использовать внутри блока
Сложное паролирование
Есть структура сайта:
/mysite.ru/A
/mysite.ru/A/B1
/mysite.ru/A/B2
Необходимо сделать так, чтобы аутентификация проводилась только при доступе к директории A всех пользователей, но при этом к директории B1 имели доступ одни пользователи, а к директории B2 - другие.
Нам понадобятся файлы.htaccess в каждой директории.
Htaccess для директории A:
AuthName "Введите пароль"
AuthType Basic
require valid-user
.htaccess для директории B1:
AuthName "Введите пароль"
AuthType Basic
AuthUserFile /var/www/mysite.ru/A/.htpasswd
require user username1 username2 username3
.htaccess для директории B2:
AuthName "Введите пароль"
AuthType Basic
AuthUserFile /var/www/mysite.ru/A/.htpasswd
require user username1 username4 username5
Вместо usernameX подставляем имена пользователей, которые имеют доступ к соответствующим директориям.
Перенаправление (редирект) на другой сайт
Redirect / http://www.anothersite.ru
Если редирект перманентный (т.е. навсегда - что очень полезно для поисковых систем), то синтаксис будет таким:
Redirect permanent / http://www.anothersite.ru
Если вместо permanent использовать слово temp - редирект будет, наоборот, временным.
Еще пример редиректа - с конкретной директории внутри сайта:
Redirect /dir2 http://www.anothersite.ru/dir2
Вместо директивы Redirect используем директиву RedirectMatch. Отличие состоит в том, что вместо указания адреса, с которого делать редирект, указывается регулярное выражение.
RedirectMatch (.*)\.gif$ http://mysite.ru/$1.png
Редиректит все обращения к.gif - на такие же по имени файлы, но с расширением.png, находящиеся по адресу mysite.ru/
Еще пример:
RedirectMatch (.*\.jpg)$ http://mysite/$1
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.old_site\.ru$
RewriteCond %{HTTP_HOST} ^old_site\.ru$
RewriteRule ^(.*)$ http://new_site.ru/$1
Показ разных страниц в зависимости от IP-адреса пользователя
SetEnvIf REMOTE_ADDR 192.168.0.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /another_page.html
Вместо 192.168.0.1 вставляем свое значение.
Подмена стартовой страницы
DirectoryIndex another_file.php
По-сути, здесь мы подменяем указываемую в httpd.conf или apache.conf файле директиву DirectoryIndex.
Замещение страниц ошибок
ErrorDocument 403 /error403.html
ErrorDocument 404 /error404.html
Таким образом, при наступлении, например, ошибки 404, браузер не будет отображать свою страницу, а попытается загрузить стилизованную страницу с сайта.
Сделать запрет отображения списка файлов в директориях без index-файла
Options -Indexes
Таким образом пользователь не сможет отобразить контент директории, где нет индексного файла (а в директории, где есть индексный файл - он не может этого сделать по-умолчанию).
Указывание отображаемой кодировки
Можно указать брайзеру - в какой кодировке ему передаются файлы. Это снизит вероятность ошибки в автоматическом определении кодировки, если файлы передаются в одной, а браузер почему-то начинает их отображать в другой.
AddDefaultCharset windows-1251
Указывание автоконвертации кодировки загружаемых файлов
При загрузке на сайт файлов они будут автоматически переконвертированы в указанную кодировку.
CharsetSourceEnc koi8-r
Добавление обработчиков MIME
AddType "text/html" .myext
AddType "application/x-rar-compressed" .rar
Таким образом мы можем добавить нашему сайту директивы, не описанные в глобальном конфиге Apache.
Блокировка определенных User-Agent (веб-браузеров, ботов и роботов)
Вот кусок файла.htaccess, в котором заблокированы несколько User-Agent (веб-браузеров; ботов, на самом то деле).
SetEnvIfNoCase User-Agent "^Titan" bad_bot
SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^SiteSnagger" bad_bot
SetEnvIfNoCase User-Agent "^WebAuto" bad_bot
SetEnvIfNoCase User-Agent "^NetAnts" bad_bot
SetEnvIfNoCase User-Agent "^WebZip/4.0" bad_bot
SetEnvIfNoCase User-Agent "^httplib" bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot
Список "плохих" User-Agent здесь очень мал и приведен только как пример.
Настройки PHP
Помимо переменных httpd.conf и apache.conf нам также может пригодиться изменение заданных в php.ini значений настроек php. .htaccess файл позволяет сделать и такие приятные вещи. Для этого используется директивы php_value и php_flag.
Разница между php_value и php_flag: первая директива присвает конкретное значение настройке:
php_value
а вторая - включает или выключает boolean-настройку:
php_flag
ВНИМАНИЕ! Вы не можете использовать php_admin_flag и php_admin_value в файле.htaccess!
Например, код
php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0
выключит автоматическое экранирование данных в PHP (выключит MagicQuotes), а код
php_value memory_limit 64M
переопределит значение максимального количества памяти, выделяемого для сайта.
Эти значения переопределяют определенные в php.ini файле величины или определяют их, если таковые не были установлены администратором хостинг-сервера. Весь список php-настроек здесь приводить смысле нет - его можно почерпнуть из документации к php нужной Вам версии.
Модуль Rewrite
В состав сервера Apache входит модуль Rewrite. Несмотря на то, что он используется в файле.htaccess, его мы описывать сейчас не будем, т.к. это отдельная тема, достойная отдельной статьи.
Актуально для: Apache 2.x
Это далеко не все, что можно делать с файлом.htaccess. На просторах интернета очень много специфичных примеров, здесь же собраны наиболее часто необходимые примеры.
Использование файла.htaccess
Файл.htaccess предназначен для индивидуальной настройки сайтов и их каталогов. Он может содержать почти все инструкции, допустимые в файле httpd.conf (главный файл конфигурации сервера Апач). В отличие от httpd.conf, который должен лежать в каталоге /usr/local/etc/httpd/conf (а к нему имеет доступ только администратор сервера), файл.htaccess может лежать и, будет обрабатываться в любом каталоге сайта (если его обработка разрешена администратором сервера). В отличие от httpd.conf, настройки которого распространяются на всех пользователей сервера (владельцев сайтов), файл.htaccess вносит локальные изменения в настройки, влияя только на каталог его содержащий, вместе с вложенными в него каталогами. Файл.htaccess более глубокого вложения, переопределяет настройки аналогичного файла верхнего уровня, для своего каталога и тех, что в него вложены. Так, например, для каталога /www/, настройки задаются файлом /www/.htaccess, а для каталога /www/data/ - файлами /www/.htaccess и /www/data/.htaccess. Если в файле.htaccess нижнего уровня обнаружены те же инструкции, что и в.htaccess верхнего уровня (вероятно с иными параметрами), то выполняться будут именно они. Таким образом, образуется иерархическая структура правил, которые на нижнем уровне могут быть совершенно не такими как на верхнем (что-то мне это напоминает).
Поскольку файлы.htaccess нередко содержат информацию об аутентификации, доступ к ним из Интернета, обычно, запрещен из соображений безопасности. Вы можете разрешить или запретить доступ к ним самостоятельно, используя инструкции в самом файле.htaccess .
Синтаксис.htaccess
Вот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера:
- Пути к файлам (директориям) указываются от корня сервера: /opt/home/www.astanafoto.com/htdocs/config/.htpasswords
- Домены с указанием протокола: http://www.site.ru
Файл имеет название именно «точка»htaccess
Htaccess должен быть записан в UNIX-формате, то есть, перевод строки должен задаваться в нем одним символом (десятичный 10, шестнадцатиричный 0A), а не двумя (десятичный 13, шестнадцатиричный 0D + десятичный 10, шестнадцатиричный 0A), как в DOS или Windows. Для тех, кто работает из под Windows, полученный тексовой файл потребуется открыть в 16-ричном редакторе и запустить замену 0D на 20 (пробел в 16-ричном варианте). Есть и другие способы превращения Windows-файла в UNIX-формат.
Определение области действия директив, задаваемых в файле.htaccess
Кроме ограничения действия директив каталогом, в котором лежит файл.htaccess и вложенными каталогами, предусмотрена возможность ограничить их действие отдельными файлами по шаблону, или файлом. Блоки, определяющие область применимости директив, сделаны по аналогии с тегами: они имеют открывающий и закрывающий тег. Внутри этих тегов указываются сами директивы, действие которых требуется ограничить.
Блок Files
Блок Files ограничивает действие вложенных в него директив одним файлом, название которого указывается в открывающем теге блока:
ДИРЕКТИВЫ Блок FilesMatch
Блок FilesMatch ограничивает действие вложенных в него директив файлами, соответствующими шаблону, указываемому в открывающем теге блока:
ДИРЕКТИВЫ Блок IfModule
Блок IfModule ограничивает действие вложенных в него директив условием, что требуемые для их выполнения, модули загружены:
Этот блок позволяет избежать ошибочных ситуаций
ДИРЕКТИВЫ
Если перед названием модуля стоит слеш, директива выполняется только если модуль не загружен
ДИРЕКТИВЫ Блок IfDefine
Блок IfDefine выполняется только при условии, что требуемые для их выполнения, значения установлены:
Так же, как IfModule, этот блок позволяет избежать ошибочных ситуаций
ДИРЕКТИВЫ Директивы файла.htaccess
В файле.htaccess предусмотрено ни много директив, но и это «ни много», оказывается мощьнейшим инструментом настройки сервера в умелых рука.
Парольная защита с помощью файла.htaccess Пароль на директорию:
AuthName "Private zone"
require valid-user
Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFile указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe.
Например в директории, которую защищаем паролем создаем такой.htaccess:
AuthName "For Registered Users Only"
AuthUserFile /pub/site.ru/.htpasswd
require valid-user
В этом примере, посетитель при запросе директории, будет читать фразу "For Registered Users Only", файл с паролями для доступа должен лежать в директории /pub/site.ru/ и называться.htapasswd . Директория указывается от корня сервера, если вы неправильно зададите директорию, то Апач не сможет прочитать файл.htpasswd и никто не получит доступа к данной директории.
Пароль только на 1 файл:
Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл.
Пример установки пароля на файл private.zip:
AuthName "Users zone"
AuthUserFile /pub/home/твой_логин/.htpasswd
Пароль на группу файлов:
Аналогично, используя, можно ставить пароли по маске файлов.
Пример установки пароля на доступ ко всем файла с расширением "sql":
AuthName "Users zone"
AuthUserFile /pub/home/твой_логин/.htpasswd
Проверка прав доступа с помощью файла.htaccess
Задача: есть каталог a1 и в нем два вложенных каталога a2, a3, введено 2 уровня пользователей. 1 группа имеет доступ только к a1 и a2, 2-я ко всем трем каталогам. Необходимо проводить аутентификацию только 1 раз - при доступе к a1, но при этом соблюдать права на доступ к а2 и а3.
Ник и пароль запрашиваются только при входе на а1 - если у юзвера есть доступ на а2 пароль уже не запрашивается. Если на а3 доступа нет, вылетит табличка "введите пароль".
www.site.ru/a1/а2
www.site.ru/a1/a3
a1 - общий и вместе с тем закрытый. а2 и а3 только для отдельных личностей.
файл.htaccess для каталога а1:
AuthName "Input password"
require valid-user
файл.htaccess для каталога а2:
AuthName "Input password"
AuthUserFile "/pub/home/login/htdocs/clousearea/.htpasswd"
require user юзвер1 юзвер2 юзвер3
файл.htaccess для каталога а3:
AuthName "Input password"
AuthUserFile "/pub/home/абв/htdocs/clousearea/.htpasswd"
require user юзвер1 юзвер4 юзвер5
Перенаправление (редирект) посетителя с помощью файла.htaccess
Редирект на другой url:
Что бы сделать перенаправления посетителя на сайт http://site.ru в.htaccess
Redirect / http://www.site.ru
Показ разных страниц, в зависимости от IP адреса посетителя:
SetEnvIf REMOTE_ADDR <нужный ip адрес> REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /another_page.html
Например, перенаправление посетителей с ip адресом 192.12.131.1 на страницу about_my_sity.html:
SetEnvIf REMOTE_ADDR 192.12.131.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /about_my_sity.html
Перенаправление посетителя при запросе определенных страниц:
Это уже для всех сетевых вирусов и сканеров. Теперь любой запрос с адресом /_vti_bin будет автоматически перенаправляться на Microsoft:
redirect /_vti_bin http://www.microsoft.com
redirect /scripts http://www.microsoft.com
redirect /MSADC http://www.microsoft.com
redirect /c http://www.microsoft.com
redirect /d http://www.microsoft.com
redirect /_mem_bin http://www.microsoft.com
redirect /msadc http://www.microsoft.com
RedirectMatch (.*)cmd.exe$http://www.microsoft.com$1
Указание стартовой страницы с помощью файла.htaccess
Что бы поменять страницу, которая будет показываться при обращении к директории, пишем:
DirectoryIndex <нужная страница>
Можно указывать несколько страниц.
DirectoryIndex index.shtml index.html index.html3 index.html index.htm
Определение обработки SSI директив с помощью файла.htaccess
SSI позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки.
Необходимы обязательные установки в httpd.conf:
В блоке, начинающемся с и заканчивающийся в строку Options Indexes добавьте Includes.
После, в файле.htaccess пишем:
AddHandler server-parsed .shtml .shtm .html .htm
Обработка в html-документах php-кода
Иногда бывает полезно "обмануть" посетителя, выдавая ему свои php-скрипты или иные файлы, как html файлы. Реально используется для индексации поисковой системой Rambler php-скриптов. Некоторые делаю мелкие фишки, вроде того, что дают файлам расширения совпадающие с какими-либо "знаковыми" именами. Например, на сайте http://www.wmaster.ru/WIND98/TEMP/Rar$EX00.001/www.osg.ru используются файлы с расширением osg: index.osg, script.osg и т.п.
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
При большой посещаемости сервера может вызвать тормоза. Спрашивайте у админа.
Замена стандартных сообщений об ошибках сервера с помощью файла.htaccess
Наиболее интересные и полезные ошибки Апача это: 403-404, 500.
403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided).
500 - внутренняя ошибка сервера (к примеру, ошибка в синтаксисе файла.htaccess).
Для того, что бы пользователю при этих ошибках были показаны ваши собственные сообщения об ошибках, в.htaccess пишем:
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
При этом при возникновении 404 ошибки пользователю загрузится файл errors/403.html.
Удобно делать собственный обработчик на некоторые ошибки. В.htaccess пишем:
ErrorDocument 403 /errors/error.php?403
ErrorDocument 404 /errors/error.php?404
ErrorDocument 500 /errors/error.php?500
В error.php через $HTTP_SERVER_VARS[´REQUEST_URI´] определяем какой документ вызвал ошибку и дальше обрабатываем. Если в.htaccess на ErrorDocument стоит указание файла с полным путем (http://site.ru/error.php), то $HTTP_SERVER_VARS[´REQUEST_URI´] будет содержать этот файл, а не вызвавший ошибку.
Величина страницы с ошибкой должна быть больше 511 байтов, иначе Internet Explorer может показать собственную страницу с описанием ошибки..
Больше информации о кодах ошибки http сервера можно посмотреть на «Коды ошибки http сервера»
Замена стандартных сообщений об ошибках сервера позволяет нормальным языком обьяснить посетителю что произошло. Примеры страниц для замены ошибок http сервера вы можете посмотреть в каталоге ошибок http сервера
Запрет просмотра каталога с помощью файла.htaccess
Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В.htaccess пишем:
Options -Indexes
И наоборот, вы можете разрешить просмотр каталога, встроив его в стандартный интерфейс сайта директивой
Options +Indexes
Смотрите пример, как может выглядеть каталог примеров, использующихся основными страинцами сайта (возможно пример с сайта bosportour.com будет более очевидным). Описание директив для подобного отображения каталогов планируется поместить в полную докумнтацию по файлу.htaccess.
Определение кодировки по умолчанию с помощью файла.htaccess
На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251:
AddDefaultCharset windows-1251
Определение кодировки на загружаемые файлы с помощью файла.htaccess
При загрузке посетителем файла на сервер, возможна перекодировка его - указываем, что все получаемые файлы будут иметь кодировку windows-1251:
CharsetSourceEnc windows-1251
Вероятные ошибки в файле.htaccess
Создал файл.htaccess, но сервер выдает 500 ошибку - Internal Erorr Ошибка синтаксиса или файл записан не в том формате.
Смотрите синтаксис.htaccess.
Просмотрите файл error.log в корне своего сайта (если он там есть). Например строка:
W:/home/h15.ru/bospor/.htaccess: CustomLog not allowed here
Указывает на ошибку вфайле w:/home/h15.ru/bospor/.htaccess (http://bospor.h15.ru/.htaccess): Директива CustomLog не допустима здесь.
Разрешить доступ с определенного ip: order allow denydeny from all
allow from <ваш ip> В данном случае, <ваш ip> обозначает конкретный адрес.
Например: order allow deny
deny from all
allow from 192.126.12.199
Запретить доступ с определенного ip:
order allow deny
deny from all
deny from <ваш ip> Использование <ваш ip>
аналогично для примера выше.
В зависимости от того в каком порядке указаны директивы меняется логика работы сервера. В случае если Deny,Allow то запрещается доступ со всех IP кроме оговоренных, в случае если Allow,Deny разрешается доступ со всех IP кроме оговоренных. Далее должны идти секции описания для доступа и запрета. Ключевое слово all означает со всех IP
Например мы хотим запретить (блокировать) доступ с IP 81.222.144.12 и 81.222.144.20 и разрешить всем остальным нам необходимо добавить в .htaccess следующий код:
Order Allow,Deny
Allow from all
Deny from 81.222.144.12, 81.222.144.20
Для обратной ситуации когда мы хотим запретить доступ со всех IP кроме 81.222.144.12 и 81.222.144.20 нам необходимо добавить в .htaccess следующий код:
Order Deny,Allow
Deny from all
Allow from 81.222.144.12, 81.222.144.20
Чтобы разрешить только в частности хостов или групп хостов для доступа к серверу, хост может быть указан в любом из следующих форматов:
- для доменного имени (или его части):
Allow from apache.org
Allow from .net example.edu - для ip адреса:
Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205 - для части ip адреса:
Allow from 10.1
Allow from 10 172.20 192.168.2 - для пары сеть/маска: Allow from 10.1.0.0/255.255.0.0
- для сети/nnn CIDR спецификации:
Allow from 10.1.0.0/16
Запрет на группу файлов по маске:
order allow,deny
deny from all
Например запрет на доступ к файлам с расширениям "inc" для веб-посетителей:
order allow,deny
deny from all
В данном примере сам веб-сервер Апач может обращаться к файлам с таким расширениям.
Запрет на конкретный файл:
Можно поставить запрет на конкретный файл по его названию и расширению.
order allow,deny
deny from all
Пароль на директорию:
AuthName "Private zone"
AuthType Basic
require valid-user
Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFile указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe.
Например в директории, которую защищаем паролем создаем такой.htaccess: AuthName "For Registered Users Only"
AuthType Basic
AuthUserFile /pub/site.ru/.htpasswd
require valid-user
В этом примере, посетитель при запросе директории, будет читать фразу "For Registered Users Only", файл с паролями для доступа должен лежать в директории /pub/site.ru/ и называться.htapasswd . Директория указывается от корня сервера, если вы неправильно зададите директорию, то Апач не сможет прочитать файл.htpasswd и никто не получит доступа к данной директории.
Пароль только на 1 файл:
Tue Feb 09 2010 15:44:59 GMT+0300
Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл.
Пример установки пароля на файл private.zip:
AuthName "Users zone"
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd
Пароль на группу файлов:
Аналогично, используя
Пример установки пароля на доступ ко всем файла с расширением "sql":
AuthName "Users zone"
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd