Главная > Программы > Apache > htaccess Практические решения по использованию файла .htaccessОглавлениеДля чего служит .htaccess?Синтаксис .htaccess
Для чего служит .htaccess?Набирая адрес в строке браузера, вы получаете на свой компьютер файлы, которые отображает браузер. Управление тем, какие файлы и
как вам показывать (пересылать) осуществляет веб-сервер. Наиболее популярных серверов два: IIS и Apache. Структура ваших директорий на сервере такая: |-user | | | -user1 | | | -user2 | |-data | | | -data1 | | | -data2 | Директории user1 и user2 будут вложенными по отношению к директории user. Если мы поместим в директорию
www файл .htaccess, то его действие будет автоматически распространяться и на директории user1 и user2. Синтаксис .htaccessВот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера: 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 <ваш 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> аналогично для примера выше. Запрет на группу файлов по маске:<Files "\.(inc|sql|...другие расширения...)$">
order allow,deny
deny from all
</Files>
Определяет доступ к файлу по его расширению. Например запрет на доступ к файлам с расширениям "inc" для веб-посетителей: <Files "\.(inc)$">
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. 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 файл:Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл.Пример установки пароля на файл private.zip: <Files private.zip>
AuthName "Users zone"
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd
</Files>
Пароль на группу файлов:Аналогично, используя <Files "\.(inc|sql|...другие расширения...)$">, можно ставить пароли по маске файлов.Пример установки пароля на доступ ко всем файла с расширением "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. 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 в .htaccessRedirect / 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 директивы?SSI позволяют "собирать" страницу из кусочков. В одном кусочке
у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу,
которая состоит из того кода, который входит в ваши кусочки. 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
Создал файл .htaccess, но сервер выдает 500 ошибку - Internal ErorrОшибка синтаксиса или файл записан не в том формате. БлагодарностиИспользованы материалы: Главная > Программы > Apache > htaccess |