DataLife Engine > PHP > Для чего служит .htaccess?
Для чего служит .htaccess?1 марта 2008. Разместил: podpole |
Это файл гибкой настройки веб-сервера Апач. "Гибкий" обозначает, что как только вы поменяли что-то в этом файле, изменения тут же вступают в силу. С помощью него можно переопределить многие директивы из файла httpd.conf (этот файл является главным конфигурационным файлом сервера Апач и его действия распространяются полностью на всех пользователей данной копии Апача). В случаях, когда у вас нет доступа в файлу настройки Апача (тот же виртуальный хостинг), вам поможет именно этот файл. Этот файл не доступен веб-пользователю из браузера. Если файл .htaccess расположен в корневой директории сервера, то его действия распространяется на весь сервер, кроме тех папок, где находится другой файл .htaccess (и кроме всех папок "ниже" этой папки со вторым .htaccess). Пример: Структура ваших директорий на сервере такая: |-user | | | -user1 | | | -user2 | |-data | | | -data1 | | | -data2 | Директории user1 и user2 будут вложенными по отношению к директории user. Если мы поместим в директорию www файл .htaccess, то его действие будет автоматически распространяться и на директории user1 и user2. В директорию data помещаем другой файл .htaccess, по-сравнению, с тем, что находится в директории user. И для директорий data1 и data2 будет действовать файл .htacсess, находящийся в data. Теперь, в директорию user2 мы помещаем еще один файл .htaccess, который отличен от того, что находится в директории 2мя уровнями выше (это директория user). В итоге, настройки для директории user2 будут определяться только тем файлом .htaccess, который находится в этой директории. Так как чаще всего Апач настроен так, что всегда ищет этот файл в директории, то .htaccess поможет вам быстро и без останова сервера произвести его перенастройку. -------------------------------------------------------------------------------- Синтаксис .htaccess Вот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера: - пути к файлам (директориям) указываются от корня сервера. Пример: /opt/home/www.astanafoto.com/htdocs/config/.htpasswords - домены с указанием протокола Пример: redirect / http://www.site.ru Файл имеет название именно "точка" htaccess Должен быть записан в unix-формате. Для оболочки far, достигается f4 (редактирование файла), shift+f2 (выбрать "сохранить как unix-текст"). -------------------------------------------------------------------------------- Как запретить веб-посетителям читать файлы в директории? Запрет на все файлы: deny from all Где all обозначает "все". -------------------------------------------------------------------------------- Разрешить доступ с определенного ip: order allow deny deny from all allow from В данном случае, обозначает конкретный адрес. Например: order allow deny deny from all allow from 192.126.12.199 -------------------------------------------------------------------------------- Запретить доступ с определенного ip: order allow deny deny from all deny from Использование аналогично для примера выше. -------------------------------------------------------------------------------- Запрет на группу файлов по маске: order allow,deny deny from all Определяет доступ к файлу по его расширению. Например запрет на доступ к файлам с расширениям "inc" для веб-посетителей: order allow,deny deny from all В данном примере сам веб-сервер Апач может обращаться к файлам с таким расширениям. -------------------------------------------------------------------------------- Запрет на конкретный файл: Можно поставить запрет на конкретный файл по его названию и расширению. order allow,deny deny from all В данном примере стоит запрет на обращения к файлу config.inc.php. -------------------------------------------------------------------------------- Пароль на директорию: 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: authname "users zone" authtype basic authuserfile /pub/home/твой_логин/.htpasswd -------------------------------------------------------------------------------- Пароль на группу файлов: Аналогично, используя , можно ставить пароли по маске файлов. Пример установки пароля на доступ ко всем файла с расширением "sql": authname "users zone" authtype basic authuserfile /pub/home/твой_логин/.htpasswd -------------------------------------------------------------------------------- Проверка прав доступа Задача: есть каталог 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 адреса посетителя: setenv if remote_addr redir="redir" rewritecond %{redir} redir rewriterule ^/$ /another_page.html Например, перенаправление посетителей с ip адресом 192.12.131.1 на страницу about_my_sity.html: setenv if 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 директивы? ssi позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки. Необходимы обязательные установки в httpd.conf: В блоке, начинающемся с и заканчивающийся в строку options indexes добавьте includes. После, в файле .htaccess пишем: addhandler server-parsed .shtml .shtm .html .htm -------------------------------------------------------------------------------- Как заставить Апач выполнять в html документах php код? Иногда бывает полезно "обмануть" посетителя, выдавая ему свои php-скрипты или иные файлы, как html файлы. Реально используется для индексации поисковой системой rambler php-скриптов. Некоторые делаю мелкие фишки, вроде того, что дают фалам расширения совпадающие с какими-либо "знаковыми" именами. Например, на сайте 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'] будет содержать этот файл, а не вызвавший ошибку. В internet explorer 5.0 неправильно обрабатывается файл, вызывающийся при ошибке, если его размер меньше 1 килобайта. Будет вызвана стандартная страница ie 404. -------------------------------------------------------------------------------- Как поставить запрет на отображение содержимого директории при отсутствии индексного файла? Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В .htaccess пишем: options -indexes -------------------------------------------------------------------------------- Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер? На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251: adddefaultcharset windows-1251 -------------------------------------------------------------------------------- Можно ли указать кодировку на загружаемые файлы? При загрузке посетителем файла на сервер, возможна перекодировка его - указываем, что все получаемые файлы будут иметь кодировку windows-1251: charsetsourceenc windows-1251 Создал файл .htaccess, но сервер выдает 500 ошибку - internal erorr Ошибка синтаксиса или файл записан не в том формате. |