Меняем параметры и разрешения работы веб-сервера, такие как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.
В этой статье вы узнаете:
Для чего служит .htaccess?
Синтаксис .htaccess
Запреты на доступ:
- Запрет на все файлы
- Разрешить доступ с определенного ip
- Запретить доступ с определенного ip
- Запрет на группу файлов по маске
- Запрет на конкретный файлУстановка пароля:
- Пароль на директорию
- Пароль только на 1 файл
- Пароль на группу файловПроверка прав доступа к 3-м директориям, 2 из которых вложенныеПеренаправления:
- Перенаправление (редирект) посетителя на другой url
- Показ разных страниц, в зависимости от IP адреса посетителя:
- Перенаправление посетителя при запросе определенных страниц:Как сделать стартовой другую страницу?
Как заставить Апач обрабатывать SSI директивы?
Как заставить Апач выполнять в html документах php код?
Как самому обрабатывать ошибки Апача?
Как поставить запрет на отображение содержимого директории при отсутствии индексного файла?
Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер?
Можно ли указать кодировку на загружаемые файлы?
И так, поехали…
Для чего служит .htaccess? |
Набирая адрес в строке браузера, вы получаете на свой компьютер файлы, которые отображает браузер. Управление тем, какие файлы и как вам показывать (пересылать) осуществляет веб-сервер. Наиболее популярных серверов два: IIS и Apache. |-user | | | -user1 | | | -user2 | |-data | | | -data1 | | | -data2 | Директории user1 и user2 будут вложенными по отношению к директории user. Если мы поместим в директорию www файл .htaccess, то его действие будет автоматически распространяться и на директории user1 и user2. |
Синтаксис .htaccess |
Вот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера: Файл имеет название именно “точка” htaccess |
Как запретить веб-посетителям читать файлы в директории? |
Запрет на все файлы: deny from all Где all обозначает “все”. Разрешить доступ с определенного ip: order allow deny deny 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 Чтобы разрешить только в частности хостов или групп хостов для доступа к серверу, хост может быть указан в любом из следующих форматов:
Запрет на группу файлов по маске: <Files "\.(inc|sql|...другие расширения...)$"> order allow,deny deny from all </Files> Определяет доступ к файлу по его расширению. В данном примере сам веб-сервер Апач может обращаться к файлам с таким расширениям. Запрет на конкретный файл: <Files config.inc.php> order allow,deny deny from all </Files> В данном примере стоит запрет на обращения к файлу config.inc.php. Пароль на директорию: AuthName "Private zone" AuthType Basic AuthUserFile /pub/home/твой_логин/.htpasswd require valid-user </Files> Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFile указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe. Например в директории, которую защищаем паролем создаем такой .htaccess: AuthName "For Registered Users Only" AuthType Basic AuthUserFile /pub/site.ru/.htpasswd require valid-user </Files> В этом примере, посетитель при запросе директории, будет читать фразу “For Registered Users Only”, файл с паролями для доступа должен лежать в директории /pub/site.ru/ и называться .htapasswd . Директория указывается от корня сервера, если вы неправильно зададите директорию, то Апач не сможет прочитать файл .htpasswd и никто не получит доступа к данной директории. Пароль только на 1 файл:сайт источник http://yapro.ru Tue Feb 09 2010 15:44:59 GMT+0300 <Files private.zip> AuthName "Users zone" AuthType Basic AuthUserFile /pub/home/твой_логин/.htpasswd </Files> Пароль на группу файлов: <Files "\.(sql)$"> AuthName "Users zone" AuthType Basic AuthUserFile /pub/home/твой_логин/.htpasswd </Files> |
Проверка прав доступа |
Задача: есть каталог a1 и в нем два вложенных каталога a2, a3, введено 2 уровня пользователей. 1 группа имеет доступ только к a1 и a2, 2-я ко всем трем каталогам. Необходимо проводить аутентификацию только 1 раз – при доступе к a1, но при этом соблюдать права на доступ к а2 и а3. файл .htaccess для каталога а1: AuthName "Input password" AuthType Basic AuthUserFile "/pub/home/login/htdocs/clousearea/.htpasswd" <Files *.*> require valid-user </Files> файл .htaccess для каталога а2: AuthName "Input password" AuthType Basic AuthUserFile "/pub/home/login/htdocs/clousearea/.htpasswd" <Files *.*> require user юзвер1 юзвер2 юзвер3 </Files *.*> файл .htaccess для каталога а3: AuthName "Input password" AuthType Basic AuthUserFile "/pub/home/абв/htdocs/clousearea/.htpasswd" <Files *.*> require user юзвер1 юзвер4 юзвер5 </Files *.*> |
Как сделать перенаправление (редирект) посетителя? |
Редирект на другой 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 Перенаправление посетителя при запросе определенных страниц: 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 позволяют “собирать” страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем – нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки. После, в файле .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. 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’] будет содержать этот файл, а не вызвавший ошибку. |
Как поставить запрет на отображение содержимого директории при отсутствии индексного файла? |
Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В .htaccess пишем:
Options -Indexes |
Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер? |
На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251:
AddDefaultCharset windows-1251 |
Можно ли указать кодировку на загружаемые файлы? |
При загрузке посетителем файла на сервер, возможна перекодировка его – указываем, что все получаемые файлы будут иметь кодировку windows-1251:
CharsetSourceEnc windows-1251 |