.htaccess - великий и ушастый защитник всего живого.
 

Как известно, самым популярным на сей день веб-сервером является Apache в различных версиях (а вовсе не IIS, как утверждает Microsoft). Его ставят на свои сервера большинство хостителей, услуга же "NT-хостинга" (т.е. как раз IIS) стоит обычно дороже. Оно и понятно - и неудобный он для привыкших к Linux админов, и глючный (почему-то червяки плодятся именно под IIS), и поэтому дорогой.

Настраивать Apache можно по-разному. Кому-то хочется, чтобы на его страницы можно было переходить только по ссылкам с титульной, кому-то хочется, чтобы при отсутствии в папке индексного файла выводилось содержимое папки, кому-то хочется сам индексный файл переименовать в yakrutoiadmin.html... Нет никаких проблем, если вы один на своем личном сервере - редактируете настройки Apache как вам хочется, и все пучком. А если вы пользуетесь чужим хостингом?

Представьте себе ситуацию, когда доблестный Антон Нехороших (админ на Valuehost'e) мужественно рожает новые настройки по каждой новой заявке, которая противоречит предыдущей. Что получится? Правильно, ничего работать ни у кого не будет. А теперь представьте, что настройки у всех одинаковые, т.е. такие, какие нужны большинству (которое, как это обычно бывает, вовсе даже не большинство, а просто стадо). В обоих случаях нормальному человеку делать будет нечего, как клепать уродские сайты.

На помощь человечеству приходит .htaccess - защитник всего живого на планете! С помощью этого чудесного файла можно изменять настройки Apache применительно к конкретным папкам конкретного пользователя. На самом деле далеко не всегда этот файл так называется, и работать он будет тоже далеко не всегда. Все опять зависит от настроек апача.

В файле настройки Apache есть несколько замечательных директив, а именно AccessFileName и AllowOverride. Первая задает имя файла настройки (по умолчанию .htaccess), вторая разрешает/запрещает его использование в папке. Чтобы работали настройки .htaccess, обе директивы должны быть настроены соответствующим образом. Только убедившись в том, что это так, можно начинать создавать собственный вариант защитника всего живого. Кстати, большинство бесплатных хостингов, хотя и держат у себя Apache, использование .htaccess не разрешают.

В первую очередь убедитесь, что ваш сервер использование .htaccess разрешает. Для этого можно создать файл .htaccess (он должен лежать в настраиваемой папке, т.е. в корне), состоящий из одной только строки:

ErrorDocument 404 /missing.html 

В missing.html запишите что-нибудь типа

<html><head> <title>Дурак косой</title> </head><body> Вы пытаетесь попасть на несуществующую страницу. </body> </html>

Теперь попробуйте набрать что-то типа http://вашадрес.дм/dfdfdfdfd. Если вас обозвали косым дураком, значит .htaccess у вас работает, а заголовок врет :). Кстати, вот и первое семейство директив. Вы можете настроить реакцию сервера на любую ошибку, используя конструкцию

ErrorDocument номерошибки /имяфайла.html

Напоминаю, что номера ошибок расшифровываются так:
401 - Требуется авторизация (Authorization Required)
403 - Доступ запрещен (Forbidden)
404 - Страница не найдена (Not Found)
500 - Ошибка в скрипте (Internal Server Error)

Еще одна важная директива позволяет настроить тот самый многострадальный индексный файл. Например, можно изменить index.shtml на privet.php:

DirectoryIndex privet.php

Следующие директивы указывают, в какую кодировку Apache должен перекодировать файлы, и в какой кодировке вы их на сервер закачиваете. Напоминаю, что кодировка может быть еще, например, koi8-r.

CharsetDefault windows-1251 CharsetSourceEnc windows-1251 

Еще обычно получается плохо, когда пользователь может посмотреть список файлов в папке, если там нет индексного файла. Чтобы избежать этого эффекта, необходимо добавить в .htaccess строчку

Options -Indexes 

Или, например, злобный хоститель заботится о загрузке процессора своего сервера, и заставляет делать файлам с SSI-директивами расширение shtml... Изменить это легко и просто, добавлением в .htaccess всего одной только строчки:

AddHandler server-parsed .shtml .shtm .htm .html 

Теперь, как нетрудно догадаться, все перечисленные расширения будут знаменовать собой файл, содержащий SSI включения. А вот чтобы использовать в .html файлах PHP включения, придется сделать немного хитрее, так как придется учитывать то, что SSI и PHP в одном файле использовать нельзя. Надо писать так:

RemoveHandler .html .htm AddType application/x-httpd-php .php .htm .html .phtml 

Еще может возникнуть проблема, заключающаяся в том, что закачиваемые на сервер скриптом файлы получаются в неправильной кодировке. Можно попробовать решить ее так:

<Location /path/to/upload.cgi> CharsetDisable On </Location>

Более подробная информация о директивах .htaccess уже не относится к разделу FAQ-документов, и может обсуждаться в форуме. Остается добавить, что крайне сложно уломать Notepad, в котором и редактируются файлы, сохранить файл без имени, да еще и с таким нестандартным расширением, как .htaccess. Необходимо сохранить его с типом "Все файлы/All files" и тшательно проследить, что умный Notepad не исправил нашу "ошибку".

 
Автор: Mixailo
 
Оригинал статьи: http://woweb.ru/publ/13-1-0-515