Apache: настройка веб-сервера, файл .htaccess
Apache: настройка веб-сервера, файл .htaccess
1. Что такое Apache?
Веб-сервер Apache используется к нас на хостинге как основной. Apache есть основой большинства веб-серверов мира и является самым распространённым веб-сервером. Причинами его популярности является легкость и гибкость конфигурации, быстродействие, поддержка всех известных на сегодня протоколов. Специально для Apache были созданы версии популярных языков программирования как Perl и PHP,
Также этот веб-сервер легко интегрируется с распространёнными СУБД как MySQL.
Пользователи нашего хостинга имеют возможность самостоятельно редактировать конфигурации Apache с помощью соответствующих деректив в файле .htaccess. Так можна решить большинство задач конфигурации веб-сервера в условиях shared-хостинга.
Для ознакомления конфигурации Apache рекомендуем читать документацию на официальном сайте - http://httpd.apache.org/docs/
2. Файл .htaccess.
Файл .htaccess используется для управления веб-сервером Apache со стороны пользователя хостинга. Этот файл состоит из директив, которые веб-сервер анализирует и обрабатывает, исполняя действия соответственно этим директивам.
Файл .htaccess может быть размещен как в корневом каталоге так и в любом его подкаталоге. Если файл .htaccess находится в подкаталоге, то его директивы перекрывают директив файла, который находится в папке на уровень выше. Изменения файла вступают в действия сразу же, так как при каждом обращении веб-сервер перечитывает его содержание.
Обратите внимание, что в начале названия файла стоит точка, которую забывать нельзя. В unix-подобних системах это значит, что файл есть скрытым.
Если использование некоторой директивы дало ошибку либо сайт стал неправильно функционировать, то вероятнее всего Вы прописали инструкцию, которая запрещена в условиях shared-хостинга. В таком случае обратитесь на support@hvosting.ua и мы попытаемся решить Вашу проблему.
3.Пример использования директив:
3.1.Переопределение кодировки html-документа
Если Вам нужно, чтобы веб-сервер "отсылал" все html-документы в кодировке koi8-r, а не в windows-1251(cp1251), как это сервер делает по умолчанию, то нужно в файл .htaccess занести следующую инструкцию:
AddType "text/html; charset=koi8-r" .html .htm .shtml
Если на Вашем ресурсе существуют html-документы в разных кодировках (ISO-8859-1, Windows-1250, Windows-1252, UTF-8), то Вам, возможно, будет необходимо принудительно отключить отдачу заголовка с кодировкой windows-1251. Для этого нужно прописать следующую директиву:
AddDefaultCharset Off
Но в этом случае соответствующая кодировка должна быть прописана в каждой html-странице в виде тега
<http-equiv="Content-type" content="text/html; charset=windows-1251" />
3.2. Защита директории паролем
Бывают ситуации, когда директорию нужно защитить от нежелательных посетителей, например административную часть сайта. Это штатная ситуация, которая решается путем использования файла .htaccess. В каталоге, доступ к которому Вы хотите ограничить в файл .htaccess (если его нет, то создайте его) дописываем следующие инструкции:
AuthType Basic
AuthName "Some Name"
AuthUserFile /home/example/data/.htpasswd
require valid-user
Путь /home/example/data/.htpasswd есть полным путем к файлу паролей на диске вашего сервера. Если Вы, например, поместите файл .htpasswd в домашний каталог, куда Вы попадаете, заходя по фтп, то путь к файлу будет иметь именно выше указанный путь, где вместо example должен быть Ваш хостинг-аккаунт.
В директиве AuthUserFile мы указываем абсолютный путь к файлу .htpasswd, который содержит логины и пароли. Если Вы создаете файл .htaccess на своем локальном компьютере, а не на нашем сервере, то передавать его по FTP обязательно нужно в текстовом (ASCII) режиме.
Файл .htpasswd сохраняет данные строчками в виде: login:password. Пароль должен быть зашифрован алгоритмом MD5. Один из вариантов создать такой файл - использовать программу, которая входит в дистрибутив Apache - htpasswd.
Расмотрим пример использования этой команды в unix shell.
htpasswd -m .htpasswd user
Эта команда запрашивает у Вас пароль и после этого внесет данные в файл. Если файл .htpasswd еще не был создан, то нужно добавить ключ -c, но будьте осторожны: если файл уже был создан, а Вы использовали этот ключ, то файл перепишется. Тоесть имеем команду:
htpasswd -mc .htpasswd user
3.3. Индексной файл.
Индексный файл - это тот файл, который открывается по умолчанию при обращении клиента к каталогу, а не к конкретному файлу. Например, клиент наберет в браузере следующий URL-адрес: http://example.in.ua/ или http://example.in.ua/admin , где в первом случае обращение идет к каталогу сайта, а во втором - к каталогу admin, который находится непосредственно в папке сайта, тоесть файл в запросе не указан. В этом случае будет запущен на выполнение индексный файл, результат его выполнения и будет отправлен клиенту на его запрос.
По умолчанию индексным файлом есть: index.html, index.htm, index.php, index.php3, index.phtml, index.shtml, default.htm или default.html. Но если у Вас есть желание его переопределить, например на myindex.php, то Вам в файле .htaccess нужно прописать следующую директиву (инструкцию):
DirectoryIndex myindex.php
3.4. Запрет или разрешение листинга файлов.
Бывают случаи, когда нужно выводить список файлов папки если не указан индексный файл. Для этого достаточно прописать в .htaccess следующую инструкцию:
Options +Indexes
Эту инструкцию нужно прописать именно в той папке, в которой Вы планируете разрешить листинг. Данная инструкция также будет действительна для всех подкаталогов, если в подкаталоге нужно выключить листинг, пропишите инструкцию
Options -Indexes
Стоить отметить, что последняя инструкция есть по умолчанию, если в директории выше не указано обратное. Когда включена опция -Indexes и индексной файл не указан сервер видает HTTP ошибку 403.
3.5. Собственные страницы ошибок.
Иногда посетители Вашего сайта запрашивают какие-то страницы, которых на сервере нет по различным причинам: или их ссылка не верная, или файлы действительно было ошибочно удалены - в этом случае сервер выдает следующий ответ:
Но .htaccess дает альтернативу этим страницам.
3.6. Отказ в доступе некоторым IP-адресам.
Когда возникает необходимость запретить доступ к сайту, либо его части, для определенных IP-адресов пишем следующие директивы:
Order Allow,Deny
Allow from All
Deny from 172.16.16.16
Здесь отказываем в доступе 172.16.16.16. Если будет совершен запрос с этого адреса в ответ сервер выдаст 403 ошибку либо соответствующую этой ошибки Вашу страничку.
Если Вы напишете адрес 172.16.16, то это значит запретить доступ для всей подсети 172.16.16/24.
3.7. Отказ в доступе к конкретным файлам.
Также иногда возникает необходимость запретить доступ к некоторым файлам, например к конфигурационным файлам, которые содержат реквизиты доступа к базам данных, интерфейсам и т.д. Пусть такой файл у вас config.cfg, тогда пишем следующее:
<FilesMatch "\.(cfg)$">
Order allow,deny
Deny from all
</FilesMatch>
Теперь на запрос этого файла сервер ответит 403 ошибкой либо соответствующей этой ошибке Вашей страницей.
3.8 Заголовок last-modified
Возникают ситуации когда нужно, чтобы веб-сервер выдавал HTTP-заголовок Last-Modified. Например, при регистрации вашего ресурса на Яндексе, возникает ошибка "Неправильные даты". Для статических документов сервер будет выдавать значение last-modified всегда. Это действует на html-файлы. Для SSI cервер будет выдавать значения last-modified только тогда, когда прописана директива «XBitHack full» (просто пропишите эту строчку в .htaccess), и для файла, к которому обращаются выставьте права на выполнение для группы. В скриптах last-modified видается другими методами. Например, учитывая динамическое генерирование кода php-скриптом, то логично в качестве last-modified отдавать текущую дату и время. Вот пример реализации:
<? header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); ?>
Обратите Ваше внимание на то, что команда header обязательно должна выполняться в скрипте до того, как скрипт начнет видавать html-текст в браузер пользователя.
3.9. Создание переадресации.
Если у Вас есть домены (необязательно, чтобы они хостились вместе) domain1.tld и domain2.tld, и Вам нужно, чтобы при обращении к domain2.tld запросы перенаправлялись, тогда пропишите следующее для домена domain2.tld:
Redirect 301 / http://domain1.tld/
*настройки указаны для домена-примера example.in.ua на сервере h56.hvosting.ua (аккаунт под названием example), при роботе з хостингом используйте свои данные соответственно.