|
Последняя модификация: 10.08.2014 г Страница загружена с адреса: http://webdesign.site3k.ru/docs/htaccess.html ![]() Настройка файла .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Вот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера:
Файл имеет название именно «точка»htaccess .htaccess должен быть записан в UNIX-формате, то есть, перевод строки должен задаваться в нем одним символом (десятичный 10, шестнадцатиричный 0A), а не двумя (десятичный 13, шестнадцатиричный 0D + десятичный 10, шестнадцатиричный 0A), как в DOS или Windows. Для тех, кто работает из под Windows, полученный тексовой файл потребуется открыть в 16-ричном редакторе и запустить замену 0D на 20 (пробел в 16-ричном варианте). Есть и другие способы превращения Windows-файла в UNIX-формат. Определение области действия директив, задаваемых в файле .htaccessКроме ограничения действия директив каталогом, в котором лежит файл .htaccess и вложенными каталогами, предусмотрена возможность ограничить их действие отдельными файлами по шаблону, или файлом. Блоки, определяющие область применимости директив, сделаны по аналогии с тегами: они имеют открывающий и закрывающий тег. Внутри этих тегов указываются сами директивы, действие которых требуется ограничить. Блок FilesБлок Files ограничивает действие вложенных в него директив одним файлом, название которого указывается в открывающем теге блока: <Files "ФАЙЛ"> ДИРЕКТИВЫ </Files> Блок FilesMatchБлок FilesMatch ограничивает действие вложенных в него директив файлами, соответствующими шаблону, указываемому в открывающем теге блока: <FilesMatch "ШАБЛОН$"> ДИРЕКТИВЫ </FilesMatch> Блок IfModuleБлок IfModule ограничивает действие вложенных в него директив условием, что требуемые для их выполнения, модули загружены: Этот блок позволяет избежать ошибочных ситуаций <IfModule МОДУЛЬ> ДИРЕКТИВЫ </IfModule> Если перед названием модуля стоит слеш, директива выполняется только если модуль не загружен <IfModule /МОДУЛЬ> ДИРЕКТИВЫ </IfModule> Блок IfDefineБлок IfDefine выполняется только при условии, что требуемые для их выполнения, значения установлены: Так же, как IfModule, этот блок позволяет избежать ошибочных ситуаций <IfDefine APACHE2> ДИРЕКТИВЫ </IfDefine> Директивы файла .htaccessВ файле .htaccess предусмотрено ни много директив, но и это "ни много", оказывается мощнейшим инструментом настройки сервера в умелых руках. Парольная защита с помощью файла .htaccessПароль на директорию:AuthName "Private zone" AuthType Basic AuthUserFile /pub/home/твой_логин/.htpasswd 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 файл:Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл. Пример установки пароля на файл private.zip: <Files private.zip> AuthName "Users zone" AuthType Basic AuthUserFile /pub/home/твой_логин/.htpasswd </Files> Пароль на группу файлов: Аналогично, используя Пример установки пароля на доступ ко всем файла с расширением "sql":
<Files "\.(sql)$">
AuthName "Users zone"
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd
</Files>
Задача: есть каталог a1 и в нем два вложенных каталога a2, a3, введено 2 уровня пользователей. 1 группа имеет доступ только к a1 и a2, 2-я ко всем трем каталогам. Необходимо проводить аутентификацию только 1 раз - при доступе к a1, но при этом соблюдать права на доступ к а2 и а3.
Ник и пароль запрашиваются только при входе на а1 - если у юзвера есть доступ на а2 пароль уже не запрашивается. Если на а3 доступа нет, вылетит табличка "введите пароль".
www.site.ru/a1
www.site.ru/a1/а2
www.site.ru/a1/a3
a1 - общий и вместе с тем закрытый. а2 и а3 только для отдельных личностей.
файл .htaccess для каталога а1:
AuthName "Input password"
AuthType Basic
AuthUserFile "/pub/home/login/htdocs/clousearea/.htpasswd"
require valid-user
файл .htaccess для каталога а2:
AuthName "Input password"
AuthType Basic
AuthUserFile "/pub/home/login/htdocs/clousearea/.htpasswd"
require user юзвер1 юзвер2 юзвер3
файл .htaccess для каталога а3:
AuthName "Input password"
AuthType Basic
AuthUserFile "/pub/home/абв/htdocs/clousearea/.htpasswd"
require user юзвер1 юзвер4 юзвер5
Редирект на другой 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
Что бы поменять страницу, которая будет показываться при обращении к директории, пишем:
DirectoryIndex <нужная страница>
Можно указывать несколько страниц.
DirectoryIndex index.shtml index.php index.php3 index.html index.htm
SSI позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки.
Необходимы обязательные установки в httpd.conf:
В блоке, начинающемся с После, в файле .htaccess пишем:
AddHandler server-parsed .shtml .shtm .html .htm
Иногда бывает полезно "обмануть" посетителя, выдавая ему свои 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
При большой посещаемости сервера может вызвать тормоза. Спрашивайте у админа.
Наиболее интересные и полезные ошибки Апача это: 403-404, 500.
403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided).
404 - запрашиваемый документ (файл, директория) не найден.
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 сервера вы можете посмотреть в Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В .htaccess пишем:
Options -Indexes
И наоборот, вы можете разрешить просмотр каталога, встроив его в стандартный интерфейс сайта директивой
Options +Indexes
Смотрите пример, как может выглядеть На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251:
AddDefaultCharset windows-1251
При загрузке посетителем файла на сервер, возможна перекодировка его - указываем, что все получаемые файлы будут иметь кодировку windows-1251:
CharsetSourceEnc windows-1251
Помимо указания директив в самих php-файлах, которые будут действовать в пределах одного скрипта или файлах php.ini, которые будут действовать в пределах текущего каталога, php-директивы можно внести в файл .htaccess, откуда они будут действовать не только на текущий каталог, но и на каталоги, вложенные в него. Общий принцип записи директив:
php_value PHP-variable value
или
php_flag PHP-flag value
Например:
php_flag magic_quotes_gpc off
php_value max_execution_time 60
php_value memory_limit "16M"
Создал файл .htaccess, но сервер выдает 500 ошибку - Internal Erorr Ошибка синтаксиса или файл записан не в том формате.
Смотрите синтаксис .htaccess.
Просмотрите файл error.log в корне своего сайта (если он там есть). Например строка:
[Tue Dec 20 02:29:10 2005] [alert] [client 127.0.0.1] w:/home/h15.ru/bospor/.htaccess: CustomLog not allowed here
Указывает на ошибку вфайле w:/home/h15.ru/bospor/.htaccess (http://bospor.h15.ru/.htaccess): Директива CustomLog не допустима здесь.
![]()
|