support@bhost.ru

Помощь

Для большинства людей, знакомых с интернет-технологиями, понятие веб-сервер однозначно ассоциируется с веб-сервером Apache. И это неспроста — более 60% узлов используют его в качестве программной платформы. Эффективность, надежность, возможность использования самых современных технологий, реализация для всех ведущих аппаратных платформ и операционных систем и, вдобавок, открытый исходный код и лицензия, позволяющая свободное распространение, — вот основные факторы, которые позволяют Apache выдерживать жесткую конкуренцию со стороны прочих, в основном, коммерческих продуктов.

В этом материале мы будем рассматривать данный программный продукт не с точки зрения специалистов, а именно с точки зрения рядового пользователя — человека, только что ставшего клиентом хостинг-компании BHOST.RU. Мы постараемся понять, как использовать практически безграничную гибкость сервера на благо нашего конкретного сайта.

Итак, примем за исходную, что мы уже приобрели услугу хостинга по одному из доступных тарифов, прошли все формальности, получили желаемый домен (например, site.ru), создали небольшой сайт и готовы загрузить его на сервер через FTP-доступ.

Как и большинство хостеров, компания BHOST.RU использует на своих серверах Apache. В двух словах его задачу можно описать так: осуществлять прием http-запросов, производить их обработку и выдавать посетителю запрашиваемую информацию (html-документы, файлы).

Apache устанавливается на сервер и настраивается администраторами компании. Настройки записываются в файл httpd.conf и являются общими для всех конечных пользователей-клиентов компании — то есть нас с вами. А как же быть, если стандартные настройки не приемлемы для выражения яркой индивидуальности нашего сайта? Для этого мы обратимся к использованию дополнительных файлов настройки, по умолчанию имеющих имя.htaccess (точка в начале названия не опечатка, а обязательный элемент!) Данный способ представляется для нас наиболее удобным и простым. Причин этому несколько. Рассмотрим их.

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

Во-вторых, действие файла.htaccess распространяется непосредственно на ту директорию, где он расположен, включая все вложенные нижестоящие директории. Настройки <наследуются> всеми нижестоящими директориями, при условии, что в них нет своих файлов.htaccess, содержащих в себе директивы, противоречащих директивам вышестоящих.htaccess. То есть мы можем создавать неограниченное количество файлов.htaccess — по одному для каждой директории сайта, задавая тем самым различные настройки.

В-третьих, ввод в действии настроек.htaccess не требует перезапуска сервера — мы просто заносим данные в файл, загружаем его в необходимую директорию сайта и тут же получаем желаемый результат.

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

Продолжать этот список достоинств можно довольно долго. В данной статье мы начнем знакомство с.htaccess и рассмотрим несколько полезных директив (команд).

Синтаксис.htaccess

Рассмотрим способы создания и несколько основополагающих правил написания.htaccess-файлов.

Самый простой способ создать файл .htaccess в среде Windows — открыть приложение Блокнот (или аналоги), ввести необходимые директивы и параметры, выбрать меню <Файл> -> <Сохранить как:> и в поле для ввода имени файла ввести <.htaccess> (не забыв про обязательную точку — именно <точка>htaccess).

При загрузке.htaccess на сервер через FTP необходимо использовать исключительно текстовый режим передачи (ASCII mode). Я рекомендую использовать для этого программу CuteFTP. Это во многом облегчит Вам жизнь и ускорит ход выполнения многих операций.

При указании пути к документам, расположенным на других ресурсах, необходимо обязательно указывать протокол. Пример:

Redirect /[запрашиваемый_документ]/ http://www.site.ru/

Так же для удобства последующего редактирования мы можем вводить в файлы.htaccess строки-комментарии. Это может быть любой текст. Например, если мы хотим пометить, на что конкретная директива влияет. Строки-комментарии должны начинаться с символа # (диез). Например, это может выглядеть так:

#Комментарии к разработке.htaccess

Возможные проблемы при использовании.htaccess

В наших статьях помимо преимуществ .htaccess мы будем рассматривать так же и возможные проблемы, приводя способы их решения.

Наиболее часто возникающая ошибка имеет номер 500. Она может быть вызвана следующими причинами:

Первая причина: неверно записан синтаксис файла.htaccess

Решение: внимательно проверьте содержимое управляющего файла.htaccess — обратите внимание на правильность указания параметров и грамматику написания директив.

Вторая возможная причина возникновения 500-й ошибки: неправильный формат.htaccess.

Решение: как мы уже писали выше, файл.htaccess должен быть загружен на сервер строго в текстовом режиме. Проверьте правильность соблюдения данного условия, попробуйте перезагрузить файл на сервер.

Так же для выяснения причин возникшей ошибки можно обратиться к записям самого сервера Apache (логам), которые хранятся в файле error_log в папке logs, но это потребует знания технического английского языка.

Мы познакомились с сервером Apache, узнали обязательные правила создания файлов дополнительных настроек.htaccess, рассмотрели несколько возможных проблем и способы их решения. Теперь же мы перейдем к наиболее интересной части нашей статьи — к изучению директив (команд).htaccess и применению их на практике. Начнем-с, пожалуй:

Директива DirectoryIndex

Данная директива позволяет изменить имя страницы, которая будет отображаться при обращении к директории (по умолчанию index.html) — то есть, установив данную директиву, мы укажем серверу, что начальной загрузочной страницей в директории является не index.html, а та, имя которой задано в.htaccess.

Для этого пишем в файле.htaccess:

DirectoryIndex [имя_загрузочной_страницы.расширение_файла]

Пример:

DirectoryIndex mypage.html

Можно указать в директиве несколько имен страниц подряд (DirectoryIndex mypage1.html mypage2.htm mypage3.php mypage4.shtml).

Директива Redirect (перенаправление)

Позволяет перенаправить пользователя, обращающегося к документу на другой адрес (URL).

Существуют такие понятия, как <внутренний>и <внешний> редирект (перенаправление). Если в директиве указывается относительный путь (/doc.html), то сервер рассматривает его как <внутренний> и обрабатывает сам. При <внутреннем> редиректе в адресной строке браузера пользователя адрес сохраняется в неизменном виде. Напротив, если в директиве указан полный путь (http://www.site.ru/doc.html), то это называется <внешним>редиректом. В этом случае сервер перенаправит пользователя по указанному пути, а адрес в адресной строке браузера изменится на конечный (в нашем случае, http://www.site.ru/doc.html)

Синтаксис:

Redirect [статус] [URL-запроса] [URL-перенаправления]

[статус] — необязательное поле, определяющее код возврата. При использовании внешнего редиректа существует возможность вернуть браузеру определенный код (т. н. код возврата), от значения которого будут зависеть дальнейшие действия браузера. Возможные значения кода возврата:

permanent (301 — документ перемещен) — при получении этого кода современный браузер автоматически <запомнит> (кэширует) изменения. Так же при наличии пользовательской Закладки на данный документ, браузер автоматически изменит адрес в этой закладке.

temp (302 — документ временно перемещен) — получив данный код, браузер определит, что, несмотря на то, что документ сейчас перемещен, рано или поздно все вернется на свое место. Осуществляется перемещение, но данные по измененному адресу не запоминаются (не кэшируется).

gone (410 — документ убран) — в этом случае браузер сочтет, что документ удален, и сервер не знает нового адреса. Переадресация не выполняется.

[URL-запроса] — адрес документа, при обращении к которому должно производиться перенаправление

[URL-перенаправления] — адрес, куда должен быть перемещен пользователь

Пример:

Внутренний редирект: Redirect /page.htm /index.php

Внешний редирект: Redirect directory/page.htm http://www.site.ru/

Директива ErrorDocument

Директива предназначена для обработки ошибок. Позволяет задать альтернативные страницы, которые будут выдаваться при возникновении ошибки. При использовании данной директивы стоит обратить внимание на особенности <внутреннего> и <внешнего> редиректа. Синтаксис директивы выглядит следующим образом:

ErrorDocument [код_ошибки] /[имя_альтернативной_страницы]

Основные коды ошибок:

401 — Authorization Required (Требуется авторизация)

403 — Forbided (Пользователь не прошел аутентификацию, запрет на доступ)

404 — Not Found (Запрашиваемый документ (директория) не найден)

500 — Internal Server Error (Внутренняя ошибка сервера)

Пример директивы:

ErrorDocument 404 /error404.htm

В этом случае, при возникновении ошибки с кодом 404 (одна из самых распространенных ошибок), сервер выдаст не стандартную страницу, а ту, что имеет имя <error404.htm>. Эта директива позволит сделать путешествие по Вашему сайту более приятным: к примеру, если пользователь запросил несуществующий документ (страницу), то вместо не привлекательной стандартной, он получит заранее заданную страницу, на которой с сохранением общего стиля оформления сайта может быть указана причина ошибки и рекомендуемые дальнейшие действия. Или можно установить переадресацию на главную страницу сайта:

Директива Order

Представим себе ситуацию, когда есть некоторый документ (директория), доступ к которому должны иметь лишь определенные пользователи. Например, если речь идет о статистике работы сайта или директории, хранящей личную информацию. Совершенно нет необходимости выставлять на обозрение эту информацию. Конечно, можно запрятать документ или директорию в глубь структуры сайта, придумать ей сложное имя, попытавшись, тем самым, исключить вероятность попадания туда случайного пользователь. Но вместе с тем мы получим и обратный эффект — тем, кому эта информация должна быть доступна, придется запоминать сложные имена, неудобный путь до конечного документа (директории) и много других промежуточных данных. Кроме этого — такой способ просто не надежен. Поэтому такая <защита информации> нам не подходит.

Для ограничения доступа к нашему внутреннему документу или директории мы будем использовать директиву Order. Директива Order является управляющей для директив Deny и Allow.

Синтаксис в данном случае выглядит так:

Order [порядок]

Переменная [порядок] — по умолчанию имеет значение Deny,Allow, но может так же принимать значение и Allow,Deny

Deny,Allow — если нам надо запретить доступ для всех, за исключением определенных пользователей.

Allow,Deny — если нам надо разрешить доступ для всех, за исключением определенных пользователей.

Директива Deny позволяет ограничить доступ к документу для всех или только для определенных пользователей.

Пример:

Deny from all

либо

Deny from [host]

, где [host] — это IP-адрес или имя стороннего ресурса.

Директива Allow

Allow — обратная директива Deny — позволяет разрешить доступ к документу для всех или только для определенных пользователей.

Пример:

Allow from all

— разрешен доступ для всех. Либо:

Allow from [host]

, где [host] — это опять-таки IP-адрес или имя стороннего ресурса.

Итак, мы рассмотрели каждую директиву группы Order в отдельности, теперь посмотрим, как это все выглядит вместе.

Для начала разберем случай, когда нам необходимо запретить доступ для всех, за исключением определенных пользователей ([порядок] директивы Order в этом случае принимает значение Deny,Allow). Пример:

Order Deny,Allow

Deny from all

Allow from 10.10.0.1

Allow from.oursite.ru

Как Вы видите, в этом случае мы запретили доступ для всех (строка Deny from all), за исключением пользователей, имеющих IP адрес 10.10.0.1 (строка Allow from 10.10.0.1), и пользователей, имя хоста которых oursite.ru (строка Allow from.oursite.ru)

Теперь рассмотрим случай, когда нам необходимо наоборот разрешить доступ для всех, за исключением определенных пользователей. Переменная [порядок] директивы Order принимает значение Allow,Deny. Пример:

Order Allow,Deny

Allow from all

Deny from 10.10.0.1

Deny from.oursite.ru

В этом случае доступ получаю все (Allowfrom all), кроме тех пользователей, чей IP адрес 10.10.0.1 (Deny from 10.10.0.1) и кто обращается к документу с ресурса oursite.ru (Deny from oursite.ru)

Приведенные выше примеры позволяют регулировать доступ ко всей директории, где расположен данный файл .htaccess, включая все вложенные директории, документы и файлы. А как же быть, если надо ограничить доступ только к одному конкретному документу? Выносить этот документ в отдельную защищенную директорию не выход. Есть способ гораздо проще. Для этого мы ту же директиву Order направляем на конкретный файл. Пример:

<Files "secret.htm">

Order Deny,Allow

Deny from all

Allow from 10.10.0.1

</Files>

Теперь наш документ (страница с именем secret.htm) будет доступен лишь для пользователей с IP адресом 10.10.0.1.

Так же мы можем ограничить доступ не только к конкретному файлу, но и к группе файлов. Для этого используем параметр FilesMatch. Пример:

<FilesMatch "\.(html|php)$">

Order Deny,Allow

Deny from all

Allow from 10.10.0.1

</FilesMatch>

Мы запретили доступ всем пользователям за исключением тех, чей IP 10.10.0.1, ко всем файлам, имеющим расширение html или php. Можно указать неограниченное количество расширений, разделяя их знаком < | >.

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

Дмитрий Мокеев.

Смотри также

Rambler's Top100 Rambler's Top100 Рейтинг@Mail.ru Проверено HostObzor