Пользователям мы предоставляем возможность самостоятельной конфигурации путем использования соответствующих директив в файле .htaccess. Таким образом можно решить большинство задач по конфигурации веб-сервера в условиях массового хостинга.
Индексный файл
Индексный файл или файл-индекс — это тот файл, который открывается по умолчанию при обращении пользователя через веб к каталогу, а не к конкретному файлу. Например, ваш посетитель запросит адрес http://ваш_домен/price/, где price — название каталога. Индексный файл это тот файл, который будет показан пользователю при обращении к каталогу без указании имени конкретного файла в нем.
По умолчанию индексными файлами являются следующие: index.html, index.php. Если вы хотите чтобы первым открывался какой-то иной файл, нужно переопределить текущие значения. Как это сделать читайте здесь.
Назначение и использование файла .htaccess
Файл .htaccess может быть размещен в корневом каталоге веб-сервера (прямо в каталоге www). В этом случае директивы из такого .htaccess действуют по всему веб-серверу. Также .htaccess может находиться и в конкретном подкаталоге сервера. Тогда директивы, которые указаны в этом файле, «перекрывают» действие директив из «основного» файла, который размещен в каталоге www или в любом каталоге более высокого уровня. То есть, действие директив из .htaccess наследуется сверху вниз, но не наоборот. Изменения, внесенные в файл, вступают в силу немедленно. Это связано с тем, что информация из .htaccess перечитывается при каждом обращении к веб-серверу. В .htaccess может быть помещено большинство из доступных директив.
Обратите внимание, что для корректной работы всех последующих примеров, в начале файла .htaccess должна быть такая строка:
Пример: как переопределить кодировку html-документов
Мы хотим «объяснить» веб-серверу что все html-документы, которые размещены на сервере, нужно «отдавать» клиенту в кодировке koi8-r, а не в windows-1251, как это сервер делает по умолчанию. Для этого поместим в .htaccess строку:
Получив такой .htaccess, веб-сервер Apache станет выдавать клиентскому браузеру заголовок, в котором будет указано, что документ имеет кодировку koi8-r.
Если на вашем ресурсе существуют html-документы в разных кодировках, (ISO-8859-1, Windows-1250, Windows-1252, UTF-8), то вам, возможно, будет необходимо отключить принудительну выдачу заголовка с кодировкой windows-1251. Для этого в .htaccess добавляется строка:
При этом соответствующая кодировка должна быть прописана на каждой html-странице в виде тега:
Пример: как закрыть директорию паролем
Одна из стандартных задач, которая решается путем использования .htaccess — это ограничение доступа к определенному каталогу на сервере. Например, нужно дать доступ к определенному каталогу отдельным посетителям, снабдив их при этом уникальным логином и паролем.
В каталоге, к которому хотим ограничить доступ по паролю, создаем файл .htaccess с такими директивами:
AuthName "Some Name"
AuthUserFile /home/hXXXXX/data/.htpasswd
require valid-user
Путь /home/hXXXXX/data/.htpasswd обозначает полный путь к файлу паролей на диске нашего сервера. Если, например, вы поместите файл .htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /home/hXXXXX/data/.htpasswd, где hXXXXX — наименование вашей виртуальной площадки (например, h12345).
В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже. Если вы создаете файл .htaccess на своем компьютере, а не сразу на сервере при помощи текстового редактора, обратите внимание на то, что .htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме.
Создаем файл паролей. Файл с паролями должен содержать строки вида login:password. Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл — воспользоваться программой, входящей в поставку Apache — htpasswd (на нашем сервере она находится в каталоге /usr/local/bin/, полный путь — /usr/local/bin/htpasswd).
Рассмотрим как создать файл паролей в unix shell прямо на сервере. Зайдем в shell, и будем выполнять следующие команды:
создаем новый файл .htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке. Просьба обязательно заменить sNQ7j9oR2w на любой собственный пароль — здесь этот пароль указан только для примера
добавляем в уже существующий файл .htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы
Если вы используете Windows и не хотите пользоваться unix shell для генерации паролей, можно загрузить Windows-версию программы htpasswd здесь и создать файл с паролями на своем компьютере, после чего, загрузить его на сервер. Если у вас уже установлена Windows-версия Apache, файл htpasswd.exe можно найти в каталоге Program Files\Apache Group\Apache\bin\.
Итак, получите htpasswd.exe и используйте его для генерации паролей таким образом:
создаем новый файл паролей htpasswd.exe, пароль и его подтверждение будут запрошены интерактивно
добавляем пользователя user2 в существующий файл паролей htpasswd.exe, запросив пароль интерактивно
После окончания заведения всех логинов файл нужно загрузить на сервер.
Пример: собственные страницы ошибок
Иногда посетители веб-сервера запрашивают страницы, которые по каким-то причинам на сервере не существуют: неправильная ссылка с другой страницы или с другого сайта, владелец сервера случайно удалил документ и так далее. По умолчанию Apache выдает некую довольно аскетичную страницу, на которой находится сообщение вроде «File not found». Вы можете создать альтернативную версию этой страницы, задав обработчик этой ошибки через .htaccess.
Пример: использование перенаправления (Redirect) на другие ресурсы или страницы
Синтаксис:
status - необязательное поле (используются в основном поисковыми роботами), определяет код возврата
3xx: Redirection (Перенаправление):
URL-from - URL или путь (как прямой так и относительный, корректнее будет указывать относительный путь) запрашиваемого документа (документ или страница или запрос к которому обращается посетитель сайта)
URL-to - URL куда будет перенаправлен запрос после обращения к URL-from
Например, хотим что бы, при обращении к любой страницы сайта, посетители узнали, в будущем, любимый ресурс. Допустим, что данное перенаправление временное и планируем использовать доменное имя в своих целях (Временное перенаправление).
Для этого создадим файл .htaccess, со следующим содержанием:
Допустим, делаем переадресацию на перемещённый контент, при обращении к doc/index.html или index.html. Где doc - папка сайта которая находится в той же директории, что и сам файл .htaccess. Сам контент допустим перенесли на сайт microsoft
Допустим, если не планируте развивать ресурс и закрываете его, но у него еще остались постоянные посетители и вам не хочется просто терять их, то можно со старого доменного имени перенаправить их на другой адрес.
Чуть более сложный пример. Нам необходимо перенаправить всех посетителей пришедших на наш сайт без преффикса www, т.е. на host-food.ru. Ввиду массовой интернет-безграмотности, многие делают наоборот, но по уму, сайт должен находиться на субдомене www. Итак, перенаправляем всех кто пришёл по имени host-food.ru на правильное - www.host-food.ru:
Также, перенаправляем с неправильно набранного имени сайта hostfood.ru на правильное - www.host-food.ru:
Пример: запрет доступа к некоторым файлам
Иногда возникает необходимость запретить доступ к определенным файлам. Например, к конфигурационным файлам, содержащим реквизиты доступа к базам данных, интерфейсам и т.п. Допустим, в файле config.cfg вы храните логин/пароль доступа к базе данных. Создаем в этой директории файл .htaccess с директивами:
Order allow,deny
Deny from all
</FilesMatch>
Теперь, если посетитель наберет в браузере нечто вида http://www.ваш_домен.ru//config.cfg, он получит ошибку 403.
Пример: переопределение индексного файла
Ситуация: пользователь обратился к каталогу http://www.ваш_домен.ru/price/. При таком запросе первым откроется и будет показан индексный файл. Если вы хотите переопределить индексный файл и сделать так, чтобы первым открывался не index.htm, а, например, файл myindex.php, то сделать это можно поместив в файл .htaccess, в соответствующем каталоге, следующую инструкцию:
Получив .htaccess с таким содержимым, веб-сервер Apache откроет, по-умолчанию, именно файл myindex.php.
Пример: Запрет доступа с какого-то определённого IP адреса
Для этого, нужно прописать в данный файл строку:
(пример для запрета с адреса 77.41.104.180)
Для обратной ситуации, когда доступ надо разрешить только с одного/нескольких IP адресов, а остальным запретить, надо использовать такие строки:
Пример: Переадресация с HTTP на HTTPS
Ситуация: требуется перенаправить всех посетителей сайта на зищищённое HTTPS соединение
Создайте или добавьте в содержимое .htaccess в корне сайта следующие параметры:
Требуется запретить доступ к сайту для всех стран кроме России, и, определённой подсети
Создайте или добавьте в содержимое .htaccess в корне сайта следующие параметры:
По поводу примера с исключением - на самом деле, эта подсеть тоже Российская, но - GeoIP на момент написания скрипта этого не знал, и не выдавал для неё страну.
Вот пример с блокировкой доступа к админке WordPress, и ограничением POST запросов к сайту только Россией:
POST запросы не кэшируются, поэтому от них создаётся большая нагрузка на сайт
Запрет всех POST запросов к какой-то директории
Создаём файл .htaccess в директории куда надо ограничить доступ: