.htaccess - великий защитник
Автор: Webdocs.ru
Как известно, самым популярным на сей день веб-сервером является Apache
в различных версиях (а вовсе не IIS, как утверждает Microsoft). Его ставят
на свои сервера большинство хостителей, услуга же "NT-хостинга" (т.е. как
раз IIS) стоит обычно дороже. Оно и понятно - и неудобный он для привыкших
к Linux админов, и глючный (почему-то червяки плодятся именно под IIS), и
поэтому дорогой.
Настраивать Apache можно по-разному. Кому-то хочется, чтобы на его
страницы можно было переходить только по ссылкам с титульной, кому-то
хочется, чтобы при отсутствии в папке индексного файла выводилось
содержимое папки, кому-то хочется сам индексный файл переименовать в
yakrutoiadmin.html... Нет никаких проблем, если вы один на своем личном
сервере - редактируете настройки Apache как вам хочется, и все пучком. А
если вы пользуетесь чужим хостингом?
Представьте себе ситуацию, когда доблестный админ компании
MegaHoster.Network мужественно рожает новые настройки по каждой новой
заявке, которая противоречит предыдущей. Что получится? Правильно, ничего
работать ни у кого не будет. А теперь представьте, что настройки у всех
одинаковые, т.е. такие, какие нужны большинству (которое, как это обычно
бывает, вовсе даже не большинство, а просто стадо). В обоих случаях
нормальному человеку делать будет нечего, как клепать уродские сайты.
На помощь человечеству приходит .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 не исправил нашу "ошибку".