Изменение названия индексной страницы. Индексные страницы - директива DirectoryIndex
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 посылают браузеру соответствующий заголовок, и уже браузер осуществляет перенаправление.
Наверное вы знаете что, все базовые настройки сервера Apache размещены в файлe httpd.conf, доступ к которому есть не всегда. Например, если на хостинге используется виртуальный сервер, когда один сервер обслуживает не одну сотню сайтов, то, невозможно разрешить хозяину одного сайта изменять конфигурацию всего сервера, так как это повлияет на все остальные сайты. Однако, Web-сервер Apache разрешает конфигурирование во время выполнения для отдельных директорий при помощи файлов.htaccess.
Предупреждение:
WEB-сервером Apache файлы с точкой в начале имени зачастую не выдаются в листинге и не показываются через FTP-клиенты.
Для полного контроля над такими файлами Вам нужен физический доступ к серверу или полноценный удалённый клиент. Через FTP Вы будете работать вслепую, посылая на сервер команды через командную строку (Думаю, что команда "help" в коммандной строке будет не лишней). Файл.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.
Пути к файлам и каталогам должны указываться а абсолютной адресации от корня партишена.
Например:
/home/users/vasya999/public_html/a_content/masters/
При указании абсолютных url обязательно должны быть зaданы протоколы, например:
Redirect / http://www.site.ru
В файлах.htaccess недопустимы пробелы в указаниях путей к файлам и в названиях самих файлов, т.к. это приводит к генерации кода ответа 500 - ошибка конфигурации сервера: "Internal Server Error".
Примеры использования.htaccess
Индексные страницы
Индексные файлы - это файлы, загружаемые по умолчанию, если в URL не указан ресурс. Например:
http://site.ru/ - ресурс не указан (файл, страница), но всё равно сервер подгрузит что-то вроде index.html.
Могут возникнуть ситуации, когда необходимо изменить состав индексных файлов, например, если нужна индексная страница index.php, а в основном конфигурационном файле httpd.conf она не прописана. Эту задачу можно решить при помощи файла.htaccess, в котором необходимо создать директиву DirectoryIndex, где будут перечислены имена индексных страниц:
DirectoryIndex index.php index.html index.htm
При запросе каталога без указания имени файла сначала будет осуществлён поиск страницы с именем index.php, а если она не найдена, тогда index.html и т.д. до конца списка, пока не будет найдена и открыта соответствующая страница.
Запрет на отображение содержимого каталога при отсутствии индексного файла
Часто требуется запретить отображение списка файлов в каталоге, если не указан или отсутствует индексный файл.Например, запретить отображение содержимого каталога с изображениями. Если такой запрет не поставить, то пользователь, обратившийся напрямую к такому каталогу, получит список всех изображений. Но мы добавим директиву
Options –Indexes
Обработка кодов ответов Web-сервера
Ни один сайт не засрахован от возникновения ошибок. Самой частой ошибкой является переход по ссылке на несуществующую страницу. В этом случае Apache генерирует код ответа 404 и отображает автоматически сгенерированную страницу с сообщением об ошибке. Наличие несуществующих страниц производит плохое впечатление на посетителей сайта. Это впечатление можно сгладить, если вместо стандартных страниц, подставлять собственные страницы с сообщением об ошибке. За назначение страниц - обработчиков кодов ответа протокола HTTP несёт ответственность директива ErrorDocument
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 "Forbidden"
После директивы ErrorDocument следует указать код ответа и страницу, на которую необходимо перенаправить посетителя при возникновении данного кода ответа.
Также, вместо адреса страницы, можно указывать простой текстовый ответ в кавычках.
Расшифровка нескольких кодов ответов сервера (HTTP response status codes):
401 ошибка - Запрос требует аутентификации пользователя (Unautorized).
403 ошибка - Доступ к запрашиваемому ресурсу запрещён (Forbidden).
404 ошибка - Запрашиваемый документ на сервере отсутствует (Not Found).
500 ошибка - Ошибка конфигурации сервера или внешней программы (Internal Server Error).
Разрешение или запрет выполнения кода PHP
Разрешение выполнения. Обычно PHP-код в HTML выполняется в файлах с расширениями php. Иногда возникают ситуации, когда необходимо выполнять PHP-код в файлах с другим расширением. В этом случае можно дать указание Web-серверу выполнять PHP-код не только в файлах с расширением php, но и в файлах с расширением html.
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
Первая строка удаляет обработчик файлов с расширениями html и htm, а вторая строка сообщает серверу о необходимости использовать для файлов с расширениями htm и html обработчик PHP.
Запрет выполнения PHP, например в каталоге с картинками:
php_flag engine 0
RemoveHandler .phtml .php .php3 .php4 .php5
AddType text/html .phtml .php .php3 .php4 .php5
- элементарная защита от хаков с загрузкой шела.
Задание кодировки на сервере
Указанная кодировка отправляется браузеру в заголовке Content-Type и позволит браузеру клиента автоматически переключиться на требуемую кодировку.
AddDefaultCharset utf-8
Задание кодировки загружаемых файлов
При загрузке файлов на сервер можно указать, в какой кодировке сервер должен ожидать файл.
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
При использовании такой директивы будет запрещён доступ из браузера ко всем файлам и каталогам текущего каталога. Запрет доступа к определенному файлу, например, здесь запрещен доступ только к файлам с именем config.php
Запрет доступа к файлам расширения inc
Для запрета доступа к файлам с несколькими типами расширений можно использовать регулярные выражения:
Запрещен доступ к файлам с расширением inc, conf и cfg
Или использовать конструкцию FilesMatch:
Запрещен доступ к файлам, имя которых начинается с " .ht " (точка, далее ht, далее что угодно).
Запретить или разрешить доступ с определенного IP-адреса или подсети
Order deny, allow
Deny from 100.111.222.70
133.252.0.0/24
Разрешить доступ только с определенного IP-адреса
Order deny, allow
Deny from all
Allow from 100.111.222.70
Директива Order позволяет задать порядок, в котором будут выполняться директивы. Сначала выполняется директива запрета доступа (Deny), а затем разрешается доступ то для IP-адреса 100.111.222.70 (Allow). Если в первой строке поменять порядок следования директив на Order allow, deny, то доступ для IP-адреса 100.111.222.70 не будет открыть, т.к. директива Deny, выполняемая последней, перекроет действие директивы Allow.
Примечание:
Следует отметить, что разрешение доступа с определённого IP-адреса иногда может не сработать. Например, в том случае, если на хостинге установлен обратный кэширующий proxy-сервер. Если директивы разрешения доступа не работают, то вам нужно обратиться по этому вопросу в службу технической поддержки хостинга.
Перенаправление на другой адрес (redirect)
Часто встречаются задачи, когда все запросы к определённому адресу нужно перенаправить на другой адрес. Это можно сделать с помощью директив Redirect и RedirectMatch. Они сообщают, что ресурс по запрошенному url отсутствует, и указывают адрес, по которому следует перейти.
Сервер с помощью директивы Redirect посылает браузеру соответствующий заголовок, и уже браузер осуществляет перенаправление.
Глобальное перенаправление на новый адрес
Redirect / http://www.site.ru/
Перенаправление при обращении к определённому файлу
Redirect /books/index.php http://www.site.ru/new/
Перенаправление при обращении к любым страницам каталога
RedirectMatch /books/.* http://www.site.ru/new/
Перенаправление при обращении к любым страницам сайта
RedirectMatch /.* http://www.site2.ru/
Также можно использовать условный редирект, например при заходе на сайт с www (www.site.ru) или на субдомен "sub.site.ru" надо перенаправлять на основной домен без www:
RewriteCond %{SERVER_NAME} ^www\.site\.ru
RewriteCond %{SERVER_NAME} (www\.)?sub\.site\.ru
RewriteRule ^(.*)$ http://site.ru/$1
Или дать отпор нехорошим ботам:
RewriteCond %{HTTP_USER_AGENT} (crawler|spider|scraper)
RewriteCond %{HTTP_USER_AGENT} (Excite|360Spider|haosou|MJ12bot)
#Никого нет дома
RewriteRule ^(.*)$ -
#или вообще Forbidden
#RewriteRule ^(.*)$ -
Если вас заинтересовало конфигурирование режимов WEB-сервера через файл.htaccess - почитайте в документации веб-сервера Apache про модуль mod_rewrite и.htaccess.
Для чего служит.htaccess?
Файл .htaccess позволяет индивидуально настраивать работу веб-сервера для вашего сайта. Можно устанавливать пароли для доступа к странице или целой папке, устанавливать страницу, выдаваемую по умолчанию при запросе к каталогу, и многие другие.
Вы можете создаватьнесколько файлов .htaccess - по одному для каждой директории на вашем сайте.
При изменении в файле.htaccess нет необходимости перезапустаь сервер - как только вы поменяли что-то в этом файле, изменения тут же вступают в силу. Даже если вы допкустите ощибки в этом файле, то они отразятся только на вашем сайте (или на той его директории, в которой он расположен).
Если файл.htaccess расположен в корневой директории сервера, то его действия распространяется на весь сервер, кроме тех директорий, где находится другой файл.htaccess (и кроме всех папок "ниже" этой папки со вторым.htaccess).
Поскольку файл.htaccess является служебным, то он не доступен веб-пользователю из браузера.
Структура ваших директорий на сервере такая: (серым цветом отмечены директории в которых нельзя устанавливать файл.htaccess
/home/st1331/ | +-- /www/ (корневая директория вашего веб-сервера) | | | +-- .htaccess | | | +-- /www/news/ | | | | | +-- .htaccess | | +-- main.html | | | | | + /www/news/2003.10/ | | | | | | | + .htaccess | | | | | + /www/news/2003.11/ | | | +-- /www/data/ | | | | | +-- .htaccess | | +-- .htpasswd | | | +-- /www/images/ | +-- /home/st1331/cgi-bin (для cgi скриптов) | +-- /log (служебная) | +-- /stats (служебная)Действие.htaccess автоматически распространяется на все вложенные директории. Таким образом будут действовать следующие файлы.htaccess:
Директория | Действующие.htaccess |
---|---|
/www/ | /www/.htaccess |
/www/news/ | /www/.htaccess /www/news/.htaccess |
/www/news/2003.10/ | /www/.htaccess /www/news/.htaccess /www/news/2003.10/.htaccess |
/www/news/2003.11/ | /www/.htaccess /www/news/.htaccess |
/www/data/ | /www/.htaccess /www/data/.htaccess |
/www/images/ | /www/.htaccess |
Правила написания.htaccess
Пути к файлам (директориям) указываются от корня сервера.
Правильный пример:
DirectoryIndex /home/st1331/www/data/main.html DirectoryIndex /www/news/main.html
Адресация к документам, расположенным на других сайтах
должно выполняться с указанием протокола
Правильный пример:
Redirect /oldsite/ http://www.site.ru/ Redirect /oldsite/ www.site.ru/
Комментарии - строки, начинающиеся с символа # .
В выражениях можно использовать переменные окружения, например %{REMOTE_ADDR} или %{HTTP_REFERER}.
Файл.htaccess должен быть записан в UNIX-формате - это означает что перевод строки должен задаваться в нем одним символом (0x0A), а не двумя (0x0D 0x0A), как в DOS или Windows
Определение области действия директив
Директива Files
Оописание: дирктива Files
Syntax:
filename
имя
файла
Пример:
Директива FilesMatch
Оописание: дирктива Files
ограничивает
действие директив одним файлом
Syntax:
regexp
: регулярное
выражение (шаблон), описывающее группу файлов.
Пример:
Перенаправления (редиректы)
Директива Redirect
внешний редирект
(сообщая браузеру о
необходимости загрузить другой URL).
Синтаксис: Redirect
[status
] URL-path
URL
status
URL-path
URL
: URL куда
должен быть выполнен редирект
Redirect temp / http://www.iho.ru/newyear.html Redirect temp /index.html http://www.iho.ru/newyear.html Redirect permanent /prices2002.html http://www.iho.ru/prices2003.html
Директива RedirectMatch
Описание: Выполняет редирект посетителя, запрашивающего документ
на другой URL. Выполняет внешний редирект
(сообщая браузеру о
необходимости загрузить другой URL). Директива аналогична
Redirect , за исключением того, что вместо адреса
запрашиваемого документа пишется регулярное выражение
(шаблон)
Синтаксис: Redirect [status
] regexp
URL
status
: необязательное
поле, определяет код возврата, допустимые значения:
permanent (301 - документ перемещен
постоянно), temp (302 - документ перемещен
временно), seeother (303 - смотрите
другой), gone (410 -
убран).
URL-path
: локальная часть URL
запрашиваемого документа.
regexp
: регулярное
выражение (шаблон), описывающее группу URL-ей.
RedirectMatch (.*)\.gif$ http://www.myserver.com$1.png RedirectMatch (.*\.jpg)$ http://www.myanother.com$1
Пример: разные страницы, в зависимости от IP адреса посетителя. В примере посетители с адреса 192.168.1.1 перенаправляются на другую страницу
RewriteCond %{REMOTE_ADDR} 192.168.1.1 RewriteRule ^/$ /anoter_index_pahe.html [L]
Пример: разные страницы, в зависимости от ссылающейся страницы. В примере посетители, приходящис со страницы http://www.partner.ru/ вместо /prices.html получают /anoter_prices.html
RewriteCond %{HTTP_REFERER} http://www.partner.ru/recep.html RewriteRule ^/prices.html$ /anoter_prices.html [L]
Перенаправление посетителя при запросе определенных страниц:
Это уже для всех сетевых вирусов и сканеров. Теперь любой запрос с адресом /_vti_bin будет автоматически перенаправляться на Microsoft:
Redirect /_vti_bin http://www.microsoft.com redirect /scripts http://www.microsoft.com redirect /MSADC http://www.microsoft.com redirect /c http://www.microsoft.com redirect /d http://www.microsoft.com redirect /_mem_bin http://www.microsoft.com redirect /msadc http://www.microsoft.com RedirectMatch (.*)\cmd.exe$ http://www.microsoft.com$1
Ограничение доступа (пароли)
Директива Order
Описание: Устатавливает порядок работы директив
и
Синтаксис:
Order порядок
порядок
может принимать значения Deny,Allow или
Allow,Deny
По умолчанию: Order Deny,Allow
Директива Deny
Описание: Запрещает доступ определенных клиентов к
ресурсам.
Синтаксис: Deny from
all|host
host
Директива Allow
Описание: Разрешает доступ определенных клиентов к
ресурсам.
Синтаксис: Deny from
all|host
host
может принимать
значения IP адреса или имени хоста.
Пример: запрет на доступ для всех
Order Deny,Allow Deny from all
Пример: разрешение на доступ для определенных IP адресов
Order Deny,Allow Deny from all Allow from .iho.ru Allow from 192.168.1.1
Пример: запрет на доступ для определенных IP адресов
Order Allow,Deny Allow from all Deny from .iho.ru Deny from 192.168.1.1
Пример: запрет на доступ для определенный файл. В примере запрещается доступ к файлу.htpasswd для всех посетителей
Пример: запрет на доступ для определенной группы файлов. В примере запрещается доступ к файлам с расширениями "lib" и "pm" для всех посетителей
Установка пароля на доступ
Директива AuthName
Описание: значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации.
Директива AuthType
Описание: Эта директива выбирает тип аутентификации. Возможны
следующие типы: Basic and Digest .
Синтаксис: AuthType Basic|Digest
Директива AuthUserFile
Описание: значение AuthUserFile указывает имя файла
с паролями для аутентификации пользователей. Файл с паролями может
быть создаен утилитой htpasswd . Путь к файлу с паролями
задается относительно корня веб-сервера. Храните файл
с паролями в папке, доступ к которой закрыт для
пользователей.
.
Синтаксис: AuthUserFile
путь-к-файлу
Директива Require
Описание: Определяет пользователей, которые могут получить
доступ
Синтаксис: Require
имя-пользователя
|valid-user
Указывая
valid-user
вы разрешаете доступ всем
пользователям, перечисленным в файле паролей.
Пример: разрешает доступ директории всем пользователям:
AuthName "Restricted area" AuthType Basic AuthUserFile /home/st1331/www/data/.htpasswd Require valid-user
Пример: разрешает доступ к директории только 3-м пользователям:
AuthName "Very restricted area" AuthType Basic AuthUserFile /home/st1331/www/data/.htpasswd Require antonio solo marina
Пример: ограничение доступа к определенным файлам (в этом примере ограничен доступ к zip архивам)
Пример: ограничение доступа к одному файлу (в этом примере ограничен доступ к файлу.htpasswd)
Управление сервером
Директива DirectoryIndex - изменения страницы по умолчанию (стартовой)
Описание: Позволяет изменить страницу, которая будет показываться
при обращении к директории
Синтаксис: DirectoryIndex
page
[page
]
page
-
название стартовой страницы. Может быть указано несколько
страниц.
Пример:
DirectoryIndex main.html index.php test.shtml
Директива ErrorDocument - обработка ошибок
Описание: позволяет устанавливать альтернативные страницы
ошибок
Синтаксис: ErrorDocument code
URL-path
URL-path
- локальный
адрес страницы
code
- код ошибки. Наиболее типичные коды
ошиброк:
401 - Требуется авторизация (Authorization
Required)
403 - пользователь не прошел аутентификацию, запрет на
доступ (Forbided)
404 - запрашиваемый документ (файл, директория)
не найден (Not Found)
500 - внутренняя ошибка сервера - ошибка
скрипта или ошибка в синтаксисе файла.htaccess - (Internal Server
Error)
ErrorDocument 401 /401.html ErrorDocument 403 /403.html ErrorDocument 404 /404.html ErrorDocument 500 /500.html
Директива AddOutputFilter - установка фильтра (SSI)
Директива SetHandler - установка обработчика (PHP, Parser)
Описание: устанавливает обработчик для файлов в заданной
директории
Синтаксис: SetHandler
handler-name
SetHandler php-script
Директива AddHandler - установка обработчика (PHP, Parser)
Описание: устанавливает обработчик для файлов указанного
типа
Синтаксис: AddHandler handler-name
filename-extension
AddHandler php-script .html AddHandler parser-script .htm
Директива AddDefaultCharset - установка обработчика (PHP, Parser)
По умолчанию на сервере установлена кодировка Windows-1251
AddDefaultCharset koi8-r
Как заставить Апач обрабатывать SSI директивы?
SSI позволяют "собирать" страницу из кусочков. В одном кусочке у
вас код меню, в другом код верхней части страницы, в третьем -
нижней. А посетитель видет обычную страницу, которая состоит из того
кода, который входит в ваши кусочки. Необходимы обязательные
установки в httpd.conf: В блоке, начинающемся с
AddOutputFilter Includes .html .htm
Как поставить запрет на отображение содержимого директории при отсутствии индексного файла?
Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В.htaccess пишем:
htpasswd
Директива htpasswd служит для создания файла с паролями, который может быть использован при аутентификации пользователей веб-сервером.
Пример: создание файла с паролями и добавление в него 1 имени:
Htpasswd -c Filename username
Пример: Добавление или изменение файла с паролями
Htpasswd Filename username2
Добавил файл.htaccess, и теперь сервер выдает 500 ошибку. Почему?
500-я ошибка может быть вызвана следующими причинами:
1.
неверный синтаксис.htaccess
2. файл.htaccess записан в формате
Windows, а должен быть записан в формате UNIX
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татьи возможна при сохранении исходного текста и подписи в конце статьи.