Файл htaccess - настройка и примеры использования. Запрет на отображение содержимого каталога при отсутствии индексного файла
Web - сервер Apache - это мощный и многофункциональный программный продукт с разнообразными возможностями. В данной статье будут расмотрены приёмы конфигурирования Apache, наиболее часто встречающиеся при разработке Web - сайтов.
Как известно, все настройки сервера Apache находятся в файлe httpd.conf, доступ к которому имеется не всегда. Например, если используется виртуальный сервер на хостинге, когда один сервер Apache обслуживает сотни сайтов, то, естественно, нельзя позволить владельцу одного сайта менять конфигурацию сервера, которая отразится на всех остальных сайтах. Тем не менее Web - сервер Apache допускает конфигурирование на уровне отдельных каталогов при помощи файлов.htaccess. Именно на работу с этими файлами, как единственными конфигурационными файлами, которые доступны большинству Web - разработчиков, и будет сделан основной упор в этой статье.
Файл.htaccess (с точкой в начале имени) – это конфигурационный файл, который даёт возможность настраивать работу сервера на уровне отдельных каталогов: устанавливать права доступа к файлам в каталогах, менять названия индексных файлов, самостоятельно обрабатывать коды ответов протокола HTTP, модифицировать адреса запрошенных страниц.
Примечание
Файл.htaccess может быть размещен в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами файлов.htaccess во вложенных каталогах).
Изменения, вносимые в файлы.htaccess, вступают в силу немедленно и не требуют перезагрузки сервера в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.
Для того, чтобы файлы.htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла httpd.conf, где должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию Web-сервера в каталоге. Список этих директив задаётся директивой AllowOverride.
Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: AuthConfig, FileInfo, Indexes, Limit, Options, All, None
Для того чтобы дать директивам файлов.htaccess максимальные права на изменения директив, значение директивы AllowOverride в файле httpd.conf должно быть равно All. Оно является значением по умолчанию.
AllowOverride All
Запретить переопределение любых директив в конфигурационных файлах.htaccess можно при помощи значения None:
AllowOverride None
Замечание
Название конфигурационного файла можно изменить, и например, назвать его не.htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Изменение названия конфигурационного файла.htaccess не рекомендуется, т.к. это может усложнить дальнейшую поддержку сервера.
Синтаксис.htaccess
Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах.htaccess.
- Пути к файлам и каталогам должны указываться от корня сервера, например, /pub/articles/masters/php/
- При указании абсолютных url обязательно должны быть зааданы протоколы, например: Redirect / http://www.site.ru
- В файлах.htaccess недопустимы пробелы в указаниях путей к файлам и в названиях самих файлов, т.к. это приводит к генерации кода ответа 500 - ошибка конфигурации сервера: "Internal Server Error".
Примеры использования.htaccess
Индексные страницы:
Могут возникнуть ситуации, когда необходимо изменить состав индексных файлов, например, если нужна индексная страница index.php, а в основном конфигурационном файле httpd.conf она не прописана. Эту задачу можно решить при помощи файла.htaccess, в котором необходимо создать директиву DirectoryIndex, где будут перечислены имена индексных страниц:
DirectoryIndex index.php index.shtml index.html
При запросе каталога без указания имени файла сначала будет осуществлён поиск страницы с именем index.php. Если страницы с таким именем нет в каталоге, то аналогичные операции будут произведены с файлом index.shtml и т.д. до конца списка, пока не будет найдена и открыта соответствующая страница.
Запрет на отображение содержимого каталога при отсутствии индексного файла
Часто требуется запретить отображение списка файлов в каталоге, если не указан или отсутствует индексный файл. Например, запретить отображение содержимого каталога с изображениями. Если такой запрет не поставить, то пользователь, обратившийся напрямую к такому каталогу, получит список всех изображений.
Options –Indexes
Обработка кодов ответов Web-сервера Apache
Ни один сайт не затрахован от возникновения ошибок. Самой частой ошибкой является переход по ссылке на несуществующую страницу. В этом случае Apache генерирует код ответа 404 и отображает автоматически сгенерированную страницу с сообщением об ошибке. Наличие несуществующих страниц производит плохое впечатление на посетителей сайта. Это впечатление можно сгладить, если вместо стандартных страниц, подставлять собственные страницы с сообщением об ошибке. За назначение страниц - обработчиков кодов ответа протокола HTTP несёт ответственность директива ErrorDocument
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
После директивы ErrorDocument следует указать код ответа и страницу, на которую необходимо перенаправить посетителя при возникновении данного кода ответа.
- 401 ошибка - Запрос требует аутентификации пользователя (Unautorized).
- 403 ошибка - Доступ к запрашиваемому ресурсу запрещён (Forbidden).
- 404 ошибка - Запрашиваемый документ на сервере отсутствует (Not Found).
- 500 ошибка - Ошибка конфигурации сервера или внешней программы (Internal Server Error).
Выполнять код PHP в файлах HTML
Обычно PHP-код выполняется в файлах с расширениями php. Иногда возникают ситуации, когда необходимо выполнять PHP-код в файлах с другим расширением. В этом случае можно дать указание Web-серверу выполнять PHP-код не только в файлах с расширением php, но и в файлах с расширением html.
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
Первая строка удаляет обработчик файлов с расширениями html и htm, а вторая строка сообщает серверу о необходимости использовать для файлов с расширениями htm и html обработчик PHP
Задание кодировки файлов на сервере
Указанная кодировка отправляется браузеру в заголовке Content-Type и позволит браузеру клиента автоматически переключиться на требуемую кодировку.
AddDefaultCharset Windows-1251
Задание кодировки загружаемых файлов
При загрузке файлов на сервер можно указать, в какой кодировке сервер должен ожидать файл.
CharsetSourceEnc windows-1251
Отключение директивы MultiViews
Включённая на хостинге опция MultiViews может вызвать неожиданные проблемы, например, отображение несуществующих страниц сайта. Допустим, на сайте существует страница с адресом http://www.sait.ru/down.php , и если посетители обратятся к несуществующему каталогу http://www.sait.ru/down/ , то включённая опция MultiViews вместо этого каталога подставит файл down.php. Однако подстановка будет выполнена не полностью - пути к изображениям, таблицам стилей и т.п. будут подставлены неверно. То есть страница будет отображена с искажениями. Для подавления такого поведения Apache опцию MultiViews следует отключить.
Options -MultiViews
Запрет доступа к файлам
Для того чтобы посетители не могли получить доступ к служебным файлам из окна браузера, можно запретить доступ к таким файлам. Для этого используется директива запрета Deny и разрешения доступа Allow.
Примечание
Использование директив Deny и Allow управляет только доступом к файлам из браузера, либо из другой программы-клиента. Подобные запреты не распространяются на скрипты сервера.
Запрет доступа к файлам из браузера
При использовании такой директивы будет запрещён доступ из браузера ко всем файлам и каталогам текущего каталога.
Запрет доступа к определенному файлу
Здесь запрещен доступ только к файлам с именем config.php.
Запрет доступа к файлам расширения inc
* - любая последовательность символов, исключая символ слеша (/).
Запретить доступа к файлам с несколькими типами расширений
Запрещен доступ к файлам с расширением inc, conf и cfg
Запретить доступ с определенного IP-адреса
Deny from 195.135.232.70
Разрешить доступ только с определенного IP-адреса
Order deny,allow
Deny from all
Allow from 195.135.232.70
Директива Order позволяет задать порядок, в котором будут выполняться директивы. Сначала выполняется директива запрета доступа(директива Deny), а затем разрешается доступ то для IP-адреса 195.135.232.70 (директива Allow). Если в первой строке поменять порядок следования директив на Order allow,deny, то доступ для IP-адреса 195.135.232.70 не будет открыть, т.к. директива Deny, выполняемая последней, перекроет действие директивы Allow.
Примечание
Следует отметить, что разрешение доступа с определённого IP-адреса иногда может не сработать. Например, в том случае, если на хостинге установлен обратный кэширующий proxy-сервер. Если директивы разрешения доступа не работают, то вам нужно обратиться по этому вопросу в службу технической поддержки хостинга.
Перенаправление на другой адрес
Часто встречаются задачи, когда все запросы к определённому каталогу или странице нужно перенаправить (redirect) на другой адрес. Это можно сделать с помощью директив Redirect и RedirectMatch. Они сообщают, что ресурс по запрошенному url отсутствует, и указывают адрес, по которому следует перейти. Директивы Redirect посылают браузеру соответствующий заголовок, и уже браузер осуществляет перенаправление.
Глобальное перенаправление на новый адрес
Redirect / http://www.site.ru/
Перенаправление при обращении к определённому файлу
Redirect /books/index.php http://www.site.ru/newbooks/
Перенаправление при обращении к любым страницам каталога
RedirectMatch /books/.* http://www.site.ru/newbooks/
Перенаправление при обращении к любым страницам сайта
RedirectMatch /.* http://www.site.ru/
*Републикация cтатьи возможна при сохранении исходного текста и подписи в конце статьи.
Htaccess (с точкой в начале имени) – это файл, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок.
Как известно, конфигурационные директивы сервера Apache находятся в файлe httpd.conf. Но далеко не всегда у Вас будут права доступа к этому файлу. Например, если Вы используете для хостинга виртуальный сервер, когда один сервер Apache обслуживает множество сайтов, то, естественно, Вам никто не позволит менять его конфигурацию. Но, тем не менее, вы можете конфигурировать работу сервера в своих директориях. И делать вы это можете с помощью файлов.htaccess.
Файл.htaccess может быть размещен в любом каталоге. Директивы этого файла действует на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов.htaccess).
Изменения, вносимые в файлы.htaccess, вступают в силу немедленно и не требуют перезагрузки сервера, в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.
Настройки httpd.conf, разрешающие применение файлов.htaccess
Для того, что бы эти файлы.htaccess можно было использовать - необходимы соответствующие настройки главного конфигурационного файла. В файле httpd.conf должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию web-сервера в каталоге. Эта директива называется AllowOverride. Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.
Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options .
Для того чтобы дать директивам файлов.htaccess максимальные права следует прописать в httpd.conf:
AllowOverride All
Примечание
При желании название конфигурационного файла можно изменить, и например, назвать его не.htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Но все же рекомендуется этого не делать.
Синтаксис.htaccess
Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах.htaccess.
- Пути к файлам и директориям должны указываться от корня сервера, например, /pub/home/server1/html/
Если вы не знаете путь от корня сервера, то Вы можете его узнать, спросив у администратора сервера, либо можете посмотреть сами, запустив на сайте функцию PHP - phpinfo(). Она выведет на экран конфигурацию PHP в виде фиолетовых таблиц. В них Вам необходимо найти переменную doc_root и посмотреть ее значение - это будет путь от корня сервера до Вашей основной директории.
- В именах доменов обязательно должны быть указаны протоколы, например:
Примеры использования.htaccess
Глобальное перенаправление (редирект) на другой адрес:
Redirect / http://www.newsite.ru
Перенаправление (редирект) только при запросе определенных страниц:
Redirect /company http://www.newsite.com/newcompany
redirect /forum http://www.newsite.com/newforum
При запросе страниц из каталогов company и forum будет произведено перенаправление на новые адреса.
Перенаправление (редирект) только посетителей с определенным IP-адресом:
SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html
Если посетитель имеет IP-адрес 192.145.121.1, то ему будет открыта страница only_for_you.html.
Изменение названия индексной страницы:
DirectoryIndex index.html index.php index.shtml
Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.
Выполнять код PHP в файлах HTML
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
Добавив эти строки в.htaccess вы дадите директиву серверу выполнять инструкции PHP не только в файлах с расширением *.php и *.phtml, но и в файлах с расширением *.htm и *.html.
Обработка ошибок Apache
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
При возникновении этих ошибок посетитель будет перенаправлен на специально созданные страницы.
- 401 ошибка - Требуется авторизация (Authorization Required).
- 403 ошибка - пользователь не прошел аутентификацию, доступ запрещен (Forbided).
- 404 ошибка - Документ не найден (Not Found).
- 500 ошибка - Внутренняя ошибка сервера (Internal Server Error).
Запрет на отображение содержимого каталога при отсутствии индексного файла
Options –Indexes
Определение кодировки, в которой сервер "отдает" файлы
AddDefaultCharset windows-1251
Определение кодировки на загружаемые файлы
CharsetSourceEnc windows-1251
Запрет доступа ко всем файлам
Deny from all
Запрещен доступ ко всем файлам и каталогам в текущей директории.
Разрешить доступ только с определенного IP-адреса
Order deny,allow
deny from all
allow from 195.135.232.70
Строка order deny,allow определяет, в каком порядке следует выполнять директивы. Сначала выполняется директива запрета доступа, а затем разрешается доступ только для IP-адреса 195.135.232.70. Если в первой строке поменять порядок следования директив на order allow,deny, то доступ для данного IP-адреса не будет открыть, так как директива deny, выполняемая последней перекроет действия директивы allow.
Apache
- самый распространённый HTTP-сервер
. Распространяется бесплатно,
включая исходные тексты.
Поддерживаются сценарии на CGI
(включая FastCGI
), PHP
, Perl
, Java
. Аутентификация
- базовая
, message-digest
, TLS
(SSL)
. С апреля 1996 это самый популярный HTTP-сервер
в Интернете,
в августе 2007 года он работал на 51% всех веб-серверов.
.htaccess
- файл дополнительной конфигурации веб-сервера Apache
, а также подобных ему серверов.
Позволяет задавать большое
количество дополнительных параметров и разрешений для работы веб-сервера у отдельных пользователей (а также на
различных папках отдельных пользователей),
таких как управляемый доступ к каталогам
, переназначение типов файлов
и т.д., не предоставляя доступа
к главному
конфигурационному файлу, т.е. не влияя на
работу всего сервиса целиком.
.htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess присутствует в любом каталоге пользователя.
Файл .htaccess может быть размещен в любом каталоге сайта. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess ).
Директивы .htaccess
предоставляют пользователю широкий выбор возможностей по настройке своего сайта,
среди которых:
|
Список всех доступных директив можно посмотреть .
Описываются предпочтения клиента относительно типа документа.
IP-адрес посетителя.
Адрес посетителя в нормальной форме - например, rt99.net.ru
.
Имя удаленного пользователя. Имеет формат имя.хост, например, kondr.www.rtt99.net.ru
Тоже, что и REMOTE_IDENT, но содержит только имя. Пример: kondr
Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к.
определяет дальнейший способ обработки информации.
Полный путь к веб-странице на сервере.
Содержит в себе все, что передавалось в скрипт.
Содержит строчку, переданную в качестве запроса при вызове CGI
скрипта.
Используется для идентификации пользователя
Cодержит путь к корневой директории сервера.
Почтовый адрес владельца сервера, указанный при установке.
IP-адрес вашего сайта.
Порт, на котором работает Apache.
Версия HTTP
протокола.
Название сервера, например, Apache/1.3.2 (Unix)
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
Переменные, предназначеные для работы со временем в разных форматах.
Это версия API
модуля Apache
(внутренний интерфейс между сервером и модулем) в
текущей сборке сервера, что определено в include/ap_mmn.h
.
Полная строка HTTP
-запроса, отправленная браузером серверу (т.е., «GET /index.html
HTTP/1.1»
).
Она не включает какие-либо дополнительные заголовки отправляемые браузером.
Ресурс, запрошенный в строке HTTP-запроса.
Полный путь в файловой системе сервера к файлу или скрипту, соответствующему этому запросу.
Условие - это шаблон условия, т.е. какое-либо регулярное выражение, применяемое к текущему экземпляру
"Сравниваемая Строка", т.е. "Сравниваемая Строка" просматривается на поиск соответствия Условию.
Помните, что Условие это perl
-совместимое регулярное выражение с некоторыми дополнениями:
Все эти проверки также могут быть предварены префиксом восклицательный знак ("!") для инвертирования их значения.
RewriteEngine
включает или выключает работу механизма преобразования. Если она установлена в положение
off
, этот модуль совсем не работает.
Заметьте, что по умолчанию настройки преобразований не наследуются. Это означает, что вы должны иметь RewriteEngine
on директиву для каждого
виртуального хоста, в котором вы хотите использовать этот модуль.
Синтаксис RewriteEngine
выглядит следующим образом:
Используйте для комбинирования условий в правилах OR
вместо AND
. Типичный пример - перенаправление
запросов на поддомены в отдельные каталоги.
Для выдачи разных сайтов для разных браузеров, согласно «User-Agent:»
заголовку запроса,
Вы можете использовать следующие директивы:
В подстановке вы можете использовать, в том числе, и специальные флаги путем добавления в качестве третьего аргумента директивы RewriteRule . Флаги - это разделённый запятыми следующий список флагов:
"redirect|R [=code]"
(вызывает редирект)
Префикс в Подстановке вида http://thishost[:thisport]/
(создающий новый URL
из какого-либо
URI
)
запускает внешний редирект (перенаправление). Если нет никакого кода, в подстановке ответ будет со
HTTP
статусом 302 (ВРЕМЕННО ПЕРЕМЕЩЕН). Для остановки процесса преобразования
вам также нужно написать флаг "L"
.
"forbidden|F [=code]"
(делает URL запрещенным)
Это делает текущий URL
запрещённым, например, клиенту немедленно отправляется ответ
с HTTP
статусом 403 (ЗАПРЕЩЕНО). Используйте этот флаг в сочетании с соответствующими
RewriteConds
для блокирования URL
по некоторым критериям.
"gone|G [=code]"
(делает URL «мёртвым»)
Этот флаг делает текущий URL
«мертвым», т.е., немедленно отправляется HTTP
ответ
со статусом 410 (GONE
). Используйте этот флаг для маркировки «мертвыми» несуществующие более
страницы.
"proxy|P [=code]"
(вызвает прокси)
Этот флаг помечает подстановочную часть как внутренний запрос прокси и немедленно
(т.е. процесс преобразования здесь останавливается) пропускает его через прокси-модуль.
Используйте этот флаг для того, чтобы добиться более мощной реализации директивы ProxyPass
,
интегрирующей некоторое содержимое на удаленных серверах в пространство имён локального сервера.
"last|L [=code]"
(последнее правило)
Остановить процесс преобразования на этом месте и не применять больше никаких
правил преобразований. Используйте этот флаг для того, чтобы не преобразовывать
текущий URL
другими, следующими за этим, правилами преобразований.
"next|N [=code]"
(следуюший раунд)
Перезапустить процесс преобразований (начав с первого правила). В этом случае URL
снова
сопоставляется неким условиям, но не оригинальный URL
, а URL
вышедший из последнего
правила преобразования. Используйте этот флаг для перезапуска процесса преобразований, т.е.
безусловному переходу на начало цикла.
"chain|C [=code]"
(связь со следующим правилом)
Этот флаг связывает текущее правило со следующим (которое, в свою очередь, может
быть связано со следующим за ним, и т.д.). Это имеет следующий эффект: если есть
соответствие правилу, процесс продолжается как обычно, т.е. флаг не производит
никакого эффекта. Если правило не соответствует условию, все следующие, связанные
правила, пропускаются.
"type|T=MIME-тип [=code]"
(принудительно установить MIME тип)
Принудительно установить MIME-тип
целевого файла в MIME-тип
. К примеру, это можно
использовать для имитации mod_alias
директивы ScriptAlias
, которая принудительно
устанавливает для всех файлов внутри отображаемого каталога MIME
тип
равный «application/x-httpd-cgi»
.
"nosubreq|NS [=code]"
(используется только в случае не внутреннего подзапроса)
Этот флаг дает команду механизму преобразований пропустить директиву, если текущий подзапрос
является внутренним подзапросом. К примеру, внутренние подзапросы в Apache
происходят тогда,
когда mod_include пытается получить информацию о возможных файлах по умолчанию для каталогов
(index.xxx). При подзапросах это не всегда полезно и даже иногда вызывает проблему в работе
набора директив преобразований. Используйте этот флаг для исключения некоторых правил.
"nocase|NC [=code]"
(не учитывать регистр)
Это делает Шаблон нечувствительным к регистру, т.е. нет различий между "A-Z" и "a-z",
когда Шаблон применяется к текущему URL
.
"qsappend|QSA [=code]"
(добавлять строку запроса)
Этот флаг указывает механизму преобразований на добавление, а не замену,
строки запроса из URL
к существующей, в строке подстановки. Используйте
это когда вы хотите добавлять дополнительные данные в строку запроса с
помощью директив преобразований.
"noescape|NE [=code]"
Этот флаг не даёт mod_rewrite
применять обычные правила экранирования URI
к результату
преобразования.
Обычно, специальные символы (такие как "%", "$", ";", и так далее) будут экранированы их шестнадцатиричными
подстановками ("%25", "%24", и "%3B", соответственно); этот флаг не дает это делать.
(не экранировать URI при выводе)
Если в подкаталогах в .htaccess нет ни одной директивы модуля mod_rewrite , то все правила преобразования наследуются из родительского каталога.
При наличии в файле .htaccess каких-либо директив модуля mod_rewrite не наследуется ничего, а состояние по умолчанию выставляется таким же, как в главном конфигурационном файле веб-сервера (по умолчанию "off"). Поэтому, если нужны правила преобразования для конкретного каталога, то нужно еще раз вставить директиву "RewriteEngine on " в .htaccess для конкретного каталога.
При наследовании правил из верхних каталогов и добавлении к ним новых свойственных только данному каталогу - необходимо выставить в начале следующее: "RewriteEngine on " и "RewriteOptions inherit " - последняя директива сообщает серверу о продолжении.
Примеры использования mod_rewrite можно посмотреть
Если у Вас установлена операционная система семейства Windows , Вы можете подключится к серверу по SSH (инструкцию по подключению можно найти ) и воспользоваться утилитой htpasswd .
Запустив htpasswd
без параметров мы увидим:
beget@ginger
~ #
htpasswd Usage: htpasswd [-cmdps] passwordfile username htpasswd -b passwordfile username password -c Create a new file. beget@ginger ~ # |
Здесь не будут рассматриваться все параметры этой команды, но вы можете сами прочитать подробности, запустив htpasswd в unix shell , или ознакомившись с соответствующей страницей документации по Apache.
Итак, изначально у нас еще нет файла с паролями и нам нужно его создать:
А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть,
мы просто не будем использовать ключ "-c" :
Указывая valid-user , Вы разрешаете доступ всем пользователям, перечисленным в файле паролей.
Приведем пример для доступа определенных пользователей из файла с паролями .htpasswd
|
Следует помнить, что при таком ограничении доступа пароли передаются по каналам связи в открытом виде и при определенных обстоятельствах могут быть перехвачены злоумышленниками. Поэтому в целях безопасности рекомендуется организовывать доступ к закрытым областям веб-сайта через защищенное SSL-соединение .
Web — сервер Apache — это мощный и многофункциональный программный продукт с разнообразными возможностями. В данной статье будут расмотрены приёмы конфигурирования Apache, наиболее часто встречающиеся при разработке Web — сайтов.
Как известно, все настройки сервера Apache находятся в файлe httpd.conf, доступ к которому имеется не всегда. Например, если используется виртуальный сервер на хостинге, когда один сервер Apache обслуживает сотни сайтов, то, естественно, нельзя позволить владельцу одного сайта менять конфигурацию сервера, которая отразится на всех остальных сайтах. Тем не менее Web — сервер Apache допускает конфигурирование на уровне отдельных каталогов при помощи файлов.htaccess. Именно на работу с этими файлами, как единственными конфигурационными файлами, которые доступны большинству Web — разработчиков, и будет сделан основной упор в этой статье.
Файл.htaccess (с точкой в начале имени) – это конфигурационный файл, который даёт возможность настраивать работу сервера на уровне отдельных каталогов: устанавливать права доступа к файлам в каталогах, менять названия индексных файлов, самостоятельно обрабатывать коды ответов протокола HTTP, модифицировать адреса запрошенных страниц.
Примечание
Файл.htaccess может быть размещен в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами файлов.htaccess во вложенных каталогах).
Изменения, вносимые в файлы.htaccess, вступают в силу немедленно и не требуют перезагрузки сервера в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.
Для того, чтобы файлы.htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла httpd.conf, где должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию Web-сервера в каталоге. Список этих директив задаётся директивой AllowOverride.
Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: AuthConfig, FileInfo, Indexes, Limit, Options, All, None
Для того чтобы дать директивам файлов.htaccess максимальные права на изменения директив, значение директивы AllowOverride в файле httpd.conf должно быть равно All. Оно является значением по умолчанию.
AllowOverride All
Запретить переопределение любых директив в конфигурационных файлах.htaccess можно при помощи значения None:
AllowOverride None
Замечание
Название конфигурационного файла можно изменить, и например, назвать его не.htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Изменение названия конфигурационного файла.htaccess не рекомендуется, т.к. это может усложнить дальнейшую поддержку сервера.
Синтаксис.htaccess
Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах.htaccess.
- Пути к файлам и каталогам должны указываться от корня сервера, например, /pub/articles/masters/php/
- При указании абсолютных url обязательно должны быть зааданы протоколы, например: Redirect / http://www.site.ru
- В файлах.htaccess недопустимы пробелы в указаниях путей к файлам и в названиях самих файлов, т.к. это приводит к генерации кода ответа 500 — ошибка конфигурации сервера: «Internal Server Error».
Примеры использования.htaccess
Индексные страницы:
Могут возникнуть ситуации, когда необходимо изменить состав индексных файлов, например, если нужна индексная страница index.php, а в основном конфигурационном файле httpd.conf она не прописана. Эту задачу можно решить при помощи файла.htaccess, в котором необходимо создать директиву DirectoryIndex, где будут перечислены имена индексных страниц:
DirectoryIndex index.php index.shtml index.html
При запросе каталога без указания имени файла сначала будет осуществлён поиск страницы с именем index.php. Если страницы с таким именем нет в каталоге, то аналогичные операции будут произведены с файлом index.shtml и т.д. до конца списка, пока не будет найдена и открыта соответствующая страница.
Запрет на отображение содержимого каталога при отсутствии индексного файла
Часто требуется запретить отображение списка файлов в каталоге, если не указан или отсутствует индексный файл. Например, запретить отображение содержимого каталога с изображениями. Если такой запрет не поставить, то пользователь, обратившийся напрямую к такому каталогу, получит список всех изображений.
Options –Indexes
Обработка кодов ответов Web-сервера Apache
Ни один сайт не затрахован от возникновения ошибок. Самой частой ошибкой является переход по ссылке на несуществующую страницу. В этом случае Apache генерирует код ответа 404 и отображает автоматически сгенерированную страницу с сообщением об ошибке. Наличие несуществующих страниц производит плохое впечатление на посетителей сайта. Это впечатление можно сгладить, если вместо стандартных страниц, подставлять собственные страницы с сообщением об ошибке. За назначение страниц — обработчиков кодов ответа протокола HTTP несёт ответственность директива ErrorDocument
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
После директивы ErrorDocument следует указать код ответа и страницу, на которую необходимо перенаправить посетителя при возникновении данного кода ответа.
- 401 ошибка - Запрос требует аутентификации пользователя (Unautorized).
- 403 ошибка - Доступ к запрашиваемому ресурсу запрещён (Forbidden).
- 404 ошибка - Запрашиваемый документ на сервере отсутствует (Not Found).
- 500 ошибка - Ошибка конфигурации сервера или внешней программы (Internal Server Error).
Выполнять код PHP в файлах HTML
Обычно PHP-код выполняется в файлах с расширениями php. Иногда возникают ситуации, когда необходимо выполнять PHP-код в файлах с другим расширением. В этом случае можно дать указание Web-серверу выполнять PHP-код не только в файлах с расширением php, но и в файлах с расширением html.
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
Первая строка удаляет обработчик файлов с расширениями html и htm, а вторая строка сообщает серверу о необходимости использовать для файлов с расширениями htm и html обработчик PHP
Задание кодировки файлов на сервере
Указанная кодировка отправляется браузеру в заголовке Content-Type и позволит браузеру клиента автоматически переключиться на требуемую кодировку.
AddDefaultCharset Windows-1251
Задание кодировки загружаемых файлов
При загрузке файлов на сервер можно указать, в какой кодировке сервер должен ожидать файл.
CharsetSourceEnc windows-1251
Отключение директивы MultiViews
Включённая на хостинге опция MultiViews может вызвать неожиданные проблемы, например, отображение несуществующих страниц сайта. Допустим, на сайте существует страница с адресом http://www.sait.ru/down.php , и если посетители обратятся к несуществующему каталогу http://www.sait.ru/down/ , то включённая опция MultiViews вместо этого каталога подставит файл down.php. Однако подстановка будет выполнена не полностью — пути к изображениям, таблицам стилей и т.п. будут подставлены неверно. То есть страница будет отображена с искажениями. Для подавления такого поведения Apache опцию MultiViews следует отключить.
Options -MultiViews
Запрет доступа к файлам
Для того чтобы посетители не могли получить доступ к служебным файлам из окна браузера, можно запретить доступ к таким файлам. Для этого используется директива запрета Deny и разрешения доступа Allow.
Примечание
Использование директив Deny и Allow управляет только доступом к файлам из браузера, либо из другой программы-клиента. Подобные запреты не распространяются на скрипты сервера.
Запрет доступа к файлам из браузера
Deny from all
При использовании такой директивы будет запрещён доступ из браузера ко всем файлам и каталогам текущего каталога.
Запрет доступа к определенному файлу
Deny from all
Здесь запрещен доступ только к файлам с именем config.php.
Запрет доступа к файлам расширения inc
Deny from all
* — любая последовательность символов, исключая символ слеша (/).
Запретить доступа к файлам с несколькими типами расширений
Deny from all
Запрещен доступ к файлам с расширением inc, conf и cfg
Запретить доступ с определенного IP-адреса
Deny from 195.135.232.70
Разрешить доступ только с определенного IP-адреса
Order deny,allow
Deny from all
Allow from 195.135.232.70
Директива Order позволяет задать порядок, в котором будут выполняться директивы. Сначала выполняется директива запрета доступа(директива Deny), а затем разрешается доступ то для IP-адреса 195.135.232.70 (директива Allow). Если в первой строке поменять порядок следования директив на Order allow,deny, то доступ для IP-адреса 195.135.232.70 не будет открыть, т.к. директива Deny, выполняемая последней, перекроет действие директивы Allow.
Примечание
Следует отметить, что разрешение доступа с определённого IP-адреса иногда может не сработать. Например, в том случае, если на хостинге установлен обратный кэширующий proxy-сервер. Если директивы разрешения доступа не работают, то вам нужно обратиться по этому вопросу в службу технической поддержки хостинга.
Перенаправление на другой адрес
Часто встречаются задачи, когда все запросы к определённому каталогу или странице нужно перенаправить (redirect) на другой адрес. Это можно сделать с помощью директив Redirect и RedirectMatch. Они сообщают, что ресурс по запрошенному url отсутствует, и указывают адрес, по которому следует перейти. Директивы Redirect посылают браузеру соответствующий заголовок, и уже браузер осуществляет перенаправление.
Файл htaccess - настройка и примеры использования - 4.1 out of 5 based on 18 votes
Файл htaccess позволяет производить конфигурирование и переопределение настроек веб-сервера Apache и подобных ему серверов. С его помощью можно установить разрешения и параметры для работы сервера у определенных пользователей хостинга и даже на отдельных папках определенного пользователя.
Чаще всего его применяют для создания 301 редиректа со старых URL на новые, переназначение типов файлов, управляемый доступ к каталогом и многого другого. Благодаря файлу htaccess не нужно обращаться к основному файлу конфигураций и затрагивать работу сервера целиком.
Что собой представляет файл htaccess и для чего используется
Как уже упоминалось, htaccess используется для установки некоторых параметров серверов Apache и других серверов. Несмотря на большое и странное расширение, настройка файла.htaccess производится путем открытия и изменения его содержимого с помощью любого текстового редактора.
Файл htaccess был придуман специально для того, чтобы можно было предоставить возможность менять конфигурацию сервера каждому пользователю, затрагивая только свой собственный сайт, а не весь сервер целиком. Всем известно, что основные директивы конфигурации Apache находятся в файле httpd.conf. Однако у большинства пользователей, а если говорить о виртуальном хостинге, то у всех пользователей, нет возможности получить доступ к нему и прав на модификацию, так как это действие будет распространяться на всех.
Файл с расширением htaccess часто называют динамическим. Это обусловлено тем, что сервер должен каждый раз обращаться к нему, когда потребуется выполнить запрос к содержащему его каталогу. Пожалуй, это существенное преимущество, так как изменения, внесенные пользователем в файл, сразу вступят в силу без потребности перезагрузки сервера. В случае внесения изменений в главный конфигурационный файл перезапуск сервера – обязательное условие вступления их в силу.
Безусловно не все так гладко, как хотелось бы, так как использование htaccess немного сказывается на производительности сервера, тем нем менее, в случае закрытого доступа к основному конфигурационному файлу, данный способ является самым простым и удобным методом для изменения параметров.
Некоторые особенности использования htaccess:
1. В нем можно переопределить большое количество директив, прописанных в главном файле httpd.confg
2. Если расположить htaccess-файл в корневой каталог, он распространится на весь сайт (исключения составят только те каталоги, в которых расположен собственный конфигурационный файл, и каталоги, расположенные ниже в древовидной структуре)
3. Разместить htaccess-файл можно в любой каталог, а его директивы будут применены ко всем подкаталогам
4. Htaccess не доступен пользователю для просмотра из браузера, так как относится к категории «системные».
Таким образом, с помощью htaccess пользователь получает гибкость в настройке собственного сервера и может применять следующие параметры:
- Директивы простого перенаправления (редирект);
- Директивы сложного перенаправления (mod_rewrite);
- Индексные страницы;
- Обработка ошибок;
- Определение кодировки;
- Управление доступом к директориям и файлам;
- Паролирование директорий;
- Опции PHP.
Примеры наиболее частого использования файла htaccess
Сейчас мы рассмотрим самые распрострнные рабочие варианты использования htaccess для настройки сайта.
Прежде чем мы приступим обратите внимание на следующие моменты:
2. Для того, чтобы создать новый файл с расширением htaccess, необходимо, открыть блокнот или другой текстовый редактор, написать код, сохранить файл, указав расширение.htaccess (точка в переди). Затем остается забросить его в директорию, для которой он предназначался.
3. Синтаксис.htaccess
Пути к файлам (директориям) указываются от корня сервера.
DirectoryIndex /home/st5155/www/data/home.html
В случае настройки файла htaccess лежащего в корневой папке сайта, пути указываются от корня этой папки.
DirectoryIndex /home.html
Домены записываются с указанием протокола http:// или https://
Redirect / http://vash-sait.ru
Файл имеет название именно "точка" htaccess.
Для создания закомментированной строчки используйте знак #.
Редактировать файл удобнее всего при помощи редактора AkelPad, входящего в состав Total Commander, достаточно его выделить и нажать F4.
Простое перенаправление - директива Redirect
1. Осуществление перенаправления на новые страницы сайта
Если на сайте были перемещены страницы на новые адреса, то пользователь или поисковый робот, обратившись по старому адресу, наверняка их не увидит. Чтобы склеить старый и новый адреса страницы можно применить простой 301 редирект. Для этого в файле конфигурации htaccess необходимо прописать следующий код:
Redirect 301 /staraya.html http://vash-sait.ru/novaya.html
2. Приведение фидов к общему формату
Раньше использовались различные форматы фидов, такие как: Atom, RSS, Rdf. Сегодня RSS является основным и самым популярным среди них, поэтому можно позаботиться о том, чтобы другие форматы перенаправлялись в один. Для этого также используется файл htaccess и следующий код:
Сложное перенаправление - директива RewriteRule
1. Перенаправление домена с www на без www.
Очень часто приходится использовать 301 редирект в htaccess для склеивания доменов с www и без www. Раньше поисковые системы считали такие адреса совершенно различными и смотрели на них как на разные сайты. Сегодня задача по склейке возлагается на поискового робота, но никогда не лишним будет указать корректное зеркало. К тому же, у самих не будет никакой путаницы.
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.vash-sait\.ru$ RewriteRule ^(.*)$ http://vash-sait.ru/$1
2. Перенаправление посетителей на разные старницы в зависимости от IP-адреса посетителя.
В htaccess имеется возможность указать на какую страницу, будет перенаправлен пользователь с конкретным IP-адресом. Например, перенаправление посетителей с ip адресом 183.11.101.1 на страницу kontakt.html
SetEnvIf REMOTE_ADDR 183.11.101.1 REDIR="redir" RewriteCond %{REDIR} redir RewriteRule ^/$ /kontakt.html
3. Перенаправление в случае обновления веб-ресурса
Во время тестирования или обновления ресурса пользователь не сможет попасть на сайт. Однако будет неправильным не предупредить его об этом. В.htaccess можно прописать код, который будет перенаправлять пользователя на информационную страницу, описывающую сущность проблемы (причины, сроки и т. д.).
RewriteEngine on RewriteCond %{REQUEST_URI} !/info.html$ RewriteCond %{REMOTE_HOST} !^14\.124\.354\.80 RewriteRule $ http://vash-sait.ru/info.html
Где 14.124.354.80 - заменить на свой IP адресс.
4. Защита от хотлинков
Не для кого не секрет, что сегодня все чаще воруют информацию с сайтов. Иногда только текстовую, а иногда и вместе с графическими изображениями. И каждый раз когда на сторонний сайт будет приходить посетитель эти изображения будут грузится с вашего хостинга создавая нагрузку и сжигая трафик. Чтобы это предотвратить добавляем следующий код:
RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9] \.)?vash-sait\.ru RewriteRule \.(gif|jpe?g|png)$ -
В приведенном выше примере на сайте грузящем изображение будет появляться ошибка 403, если желаете чтобы вместо картинки отображалась определенная картинка, то последнюю строку замените на следующую:
RewriteRule \.(jpg|png|gif)$ http://vash-sait.ru/images/imageinfo.jpg
5. Перенаправление на безопасное https-соединение
В.htaccess можно настроить перенаправление на безопасное https соединение, чтобы все пользователи работали только через данный протокол, гарантирующий безопасность и надежность передачи данных между сервером и клиентом.
RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
6. Автоматическая подстановка слеша в конце адреса.
Очень распространены ситуации, когда URL-адрес, заканчивается именем каталога: http://vash-sait.ru/images/raznoe
Apache самостоятельно может исправить ошибку и сделать 301-е перенаправление, добавив к ссылке недостающий слеш. Таким образом, пользователь не ощутит никакой разницы и получит в ответ необходимую страницу. Но на выполнение такого действия понадобится в два раза больше времени. Следующий код всегда будет добавлять / в конце адреса.
RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/
7. Блокировка пользователей пришедших с определенного сайта
Если владелец сайта не хочет, чтобы его ресурс посещали пользователи, зашедшие с определенного домена и требуется им закрыть доступ - htaccess также готов помочь. Вы можете перекрыть трафик с определенных сайтов используя страницу 403 или «запрет доступа». Полезна данная настройка тогда, когда на ваш сайт появились ссылки с сайтов с запрещенным контентом и по ним идет трафик на ваш сайт.
Индексные страницы - директива DirectoryIndex
1. Изменение индексной старницы загружаемой по умолчанию
Обычно по умолчанию индексными страницами является index.htm, index.php или index.html, при обращении к директории сайта сразу происходит поиск данных файлов. Но при необходимости можно переопределить индексную страницу на любую другую. Подобная задача также решается с использованием htaccess-файла.
DirectoryIndex mypage.html
Имеется возможность указать две и более страницы. Стоит учитывать, что они будут отыскиваться в той последовательности, в которой перечислены в конфигурационном файле за директивой DirectoryIndex.
DirectoryIndex index.shtml index3.php index.html index.htm
Обработка ошибок - директива ErrorDocument
1. Пользовательская страница ошибок
Несмотря на тот факт, что многие на сайтах до сих пор пользуются стандартной страницей ошибок 404, она вряд ли удовлетворит пользователя, который не получил ожидаемого результата и вместо него увидит непонятную для него информацию. Необходимо предложить страницу, которая будет соответствовать основному стилю, на которой будет выводиться более подробная информация о причинах неудачного выполнения запроса. Для этого можно указать в htaccess какой файл грузить вместо стандартной страницы ошибки 404.
ErrorDocument 404 "/404.html"
2. Создание своих страниц с описанием ошибок
Для тех, кто устал от привычных страниц, выводящих описание ошибок, произошедших на сайте, предоставляется возможность воспользоваться своими собственными заготовками. Нужно лишь самому сверстать несколько файлов с разрешением *.html, с необходимым содержимым и внести запись в htaccess-файл.
ErrorDocument 401 /errors401.html ErrorDocument 403 /errors403.html ErrorDocument 404 /errors404.html ErrorDocument 500 /errors505.html
Чтобы вы знали что помещать в каждую из страниц ошибок, кратико опишем их значения.
- 401 - Требуется авторизация (Authorization Required)
- 403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided)
- 404 - запрашиваемый документ (файл, директория) не найден (Not Found)
- 500 - внутренняя ошибка сервера - ошибка скрипта или ошибка в синтаксисе файла.htaccess - (Internal Server Error)
Определение кодировки
1. Определение кодировки, в которой сервер "отдает" файлы
Чтобы у пользователя на дисплее монитора не выводились непонятные для него символы, из которых не представляется возможности прочесть слова, необходимо указать корректную кодировку. Даже при отсутствии тега < Мета http-equiv = "Content-Type"> текст на странице будет всегда корректным и поможет в этом снова htaccess-файл.
AddDefaultCharset UTF-8
2. Определение кодировки на загружаемые файлы
Подобная ситуация может возникнуть в том случае, когда пользователь загружает на сервер файл и его содержимое может быть перекодировано. Чтобы использовалась требуемая кодировка htaccess должен содержать код, указывающий что все загружаемые файлы должны будут открываться с кодировкой UTF-8.
CharsetSourceEnc UTF-8
Управление доступом к директориям и файлам
1. Запретить доступ ко всем файлам
Самый простой способ запретить просматривать файл – установить пароль, но не всегда этого достаточно. В некоторых случаях у пользователя не должно быть прав на просмотр любых файлов или каталогов (например нужно заблокировать системные каталоги, изменения в которых могут усугубить работу сервера). В htaccess-файле прописывается отрывок кода, лишающий всех привилегий пользователей.
2. Разрешить доступ с определенного IP