Перенаправление посетителя при запросе определенных страниц. Почему поддомен показывает ошибку

12.07.2019

Для того, что бы.htaccess можно было использовать — необходимы соответствующие настройки главного конфигурационного файла Apache - httpd.conf .
AllowOverride . Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.

Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options .

AllowOverride All

Синтаксис.htaccess

redirect /company http://www.newsite.com/newcompany
redirect /forum http://www.newsite.com/newforum

SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR= "redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html

DirectoryIndex index.html index.php inde x.shtml

RemoveHandler .html .htm
AddType application/x-httpd-php .php .ht m .html .phtml

Обработка ошибок Apache

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html






Options -Indexes

AddDefaultCharset windows-1251

CharsetSourceEnc windows-1251

Запрет доступа ко всем файлам

deny from all

order deny,allow
deny from all
allow from 195.135.232.70

deny from 195.135.232.70

[Error: Irreparable invalid markup ("") in entry. Owner must fix manually. Raw contents below.]

Для того, что бы.htaccess можно было использовать — необходимы соответствующие настройки главного конфигурационного файла Apache - httpd.conf.
В файле httpd.conf должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию web-сервера в каталоге. Эта директива называется AllowOverride. Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.

Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options.

Для того чтобы дать директивам файлов.htaccess максимальные права следует прописать в httpd.conf:

AllowOverride All

Синтаксис.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.

Запретить доступ с определенного IP-адреса

deny from 195.135.232.70

Запретить доступ к определенному файлу


deny from all

Запрещен доступ посетителей к файлам config.php. Этот запрет не действует на скрипты web-сервера. Они по прежнему будут иметь доступ к этому файлу.

Запретить доступ к файлам с определенным расширением


deny from all

Здесь запрещен доступ к файлам с расширением *.conf. Директива , при указании имени файлов, позволяет использовать подстановочные символы.

? - любой одиночный символ
* - любая последовательность символов, исключая символ / (слеш)

Запретить доступа к файлам с несколькими типа расширений


deny from all

Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива , по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(~) в опциях директивы. Синтаксис следующий:
[тильда] [пробел] [далее_все_без_пробелов]

Установка пароля на директорию

AuthName "Admin page"
AuthType Basic
AuthUserFile /pub/home/server/.pass
require valid-user

Инструкции файла.htaccess

Файл.htaccess позволяет изменять многие настройки вашего сайта - как настройки веб-сервера Apache, так и опции PHP. Директивы, указанные в файле.htaccess, распространяются на ту директорию, в которой он находится, а также на все вложенные директории (за одним исключением, которое будет рассмотрено ниже), в том числе и на поддомены (поскольку директории поддоменов являются поддиректориями основного сайта).Как правило, файл.htaccess создается в корневой директории сайта и иногда в директориях, которые требуют специфического поведения веб-сервера (запрет отображение списка файлов, включение SSI, авторизация и прочее).

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

Почему только что созданный файл.htaccess не отображается в списке файлов?

Некоторые FTP-клиенты считают файлы, начинающиеся с точки, скрытыми и не отображают их по умолчанию. В таких случаях для того, чтобы видеть файл.htaccess, необходимо в настройках FTP-клиента включить настройку «Отображать скрытые файлы».

Почему файл.htaccess, размещенный в корне сайта, не работает во вложенных директориях?

Это связано с оптимизацией обработки статических файлов.

Сайты обычно содержат большое количество статических файлов. Это файлы, которые не требуют запуска скриптов для их отображения: картинки, музыка, видео, css, javascript, простые html-страницы. Для ускорения работы сайтов они обрабатываются, минуя основной веб-сервер и без анализа файлов.htaccess.

Иногда возникает необходимость запретить в конкретной директории оптимизацию обработки статических файлов. Например, если это картинки, на которые нужно накладывать водяной знак, перенаправляя запросы к ним на специальный скрипт.

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

Важно не забывать, что отключение оптимизации может повлиять на скорость работы Вашего сайта и использование ресурсов тарифного плана.

Почему поддомен показывает ошибку?

Для поддомена наследуются настройки.htaccess домена. Если в настройках.htaccess домена используются правила mod_rewrite, они могут приводить к некорректной работе поддомена. Чтобы правила mod_rewrite домена не действовали на поддомен, необходимо добавить в файл.htaccess поддомена следующую строчку:

RewriteEngine off

Почему при открытии директории сайта в браузере показывается 403 Forbidden?

При открытии директории без указания конкретного файла веб-сервер ищет файлы index.htm, index.html, index.php для отображения (индексные файлы). Если индексные файлы отсутствуют, сервер возвращает ошибку 403 Forbidden, так как отображение списка файлов в директории по умолчанию запрещено.

Чтобы ошибка 403 Forbidden не отображалась, либо создайте в директории индексный файл, либо добавьте в файле.htaccess опцию:

Options +Indexes

Установка индексного файла для сайта

По умолчанию индексным файлом вашего сайта веб-сервер считает файл (в порядке приоритета): index.html , index.php .

Чтобы установить в качестве индексного файла произвольный файл, следует добавить инструкцию:

DirectoryIndex имя_файла

Например, следующая инструкция предписывает веб-серверу при обращении к сайту открывать в качестве индексной страницы скрипт на языке Perl, размещенный в директории cgi-bin вашего сайта:

DirectoryIndex /cgi-bin/engine.pl

Как включить отображение ошибок PHP?

Для отображения ошибок PHP добавьте в файл.htaccess директиву:

Php_value display_errors 1

Как изменить максимальный размер загружаемых файлов в PHP?

Максимальный размер загружаемых файлов указывается в.htaccess с помощью двух директив:

Php_value upload_max_filesize 20M php_value post_max_size 20M

Вместо 20M укажите желаемый размер ограничения. Значение этих параметров не может быть больше 50M. Обратите внимание, что символ “M” (латинская M) указывается слитно со значением.

Как указать интерпретатору PHP необходимость обрабатывать не только файлы.php?

Чтобы заставить интерпретатор PHP обрабатывать файлы с произвольным расширением, нужно добавить соответствующую инструкцию в файл.htaccess, расположенный в корневой директории вашего сайта. Например, следующая инструкция укажет интерпретатору PHP на необходимость обрабатывать файлы с расширением.phtml:

AddType application/x-httpd-php .phtml

Как изменить время хранения сессий PHP

Изменение времени хранения сессий может потребоваться, например, если вы хотите, чтобы данные об авторизации пользователей на вашем сайте сохранялись дольше. По умолчанию время хранения сессий - 1440 секунд (24 минуты), cookie с идентификатором сессии - до закрытия браузера пользователем.

Для изменения времени хранения сессий PHP необходимо внести несколько изменений в.htaccess. Так как конкретные настройки могут зависеть от особенностей работы вашего сайта с посетителями, рекомендуем перед внесением изменений проконсультироваться с профессиональным разработчиком. Возможно, непосредственно для вашего сайта более эффективным окажется альтернативный механизм хранения данных, привязанных к посетителю (например, только через cookie), либо альтернативный механизм хранения сессий PHP (установленный с помощью session_set_save_handler()).

Для изменения времени хранения сессий добавьте в.htaccess следующие директивы:

# Создайте отдельную директорию для хранения сессий вашего сайта, # например, domains/ВАШ_САЙТ/tmp. Это необходимо, чтобы PHP не удалял сессии сайта # при очистке старых сессий других сайтов, работающих на аккаунте. # Установите директорию хранения сессий для сайта с помощью session.save_path. php_value session.save_path /home/ВАШ_ЛОГИН/domains/ВАШ_САЙТ/tmp # Установите максимальное время жизни сессии в секундах. # 604800 - 1 неделя. php_value session.gc_maxlifetime 604800 # Установите время жизни cookie, которая сохраняет идентификатор сессии # в браузере пользователя. php_value session.cookie_lifetime 604800

Обратите внимание: если сессия открывается для каждого неавторизованного пользователя, при большом количестве посетителей и длительном времени сохранения сессий образуется большое количество файлов в папке, указанной в session.save_path. Это может вызывать замедления сайта в момент запуска механизма очистки старых сессий и увеличивать количество ресурсов, необходимых для работы сайта. В случае работы с большим количеством сессий мы рекомендуем использовать альтернативные механизмы их хранения и очистки, например:

  • Указывать вложенность директорий хранения сессий с помощью аргумента N в session.save_path. Очищать старые сессии при этом необходимо собственными скриптами. Более подробная информация об этом методе находится в описании session.save_path в документации PHP.
  • Реализовать собственный механизм хранения сессий (например, в MySQL) и установить его с помощью session_set_save_handler() .

Как включить SSI

Директивы SSI (Server Side Includes) по умолчанию обрабатываются в файлах с расширением.shtml (например, index.shtml). Чтобы SSI обрабатывались и в других файлах, необходимо в файле.htaccess указать следующие директивы:

AddType text/html .html .ssi AddOutputFilter INCLUDES .html .ssi

Вместо “.ssi .html” укажите расширения файлов, в которых должны обрабатываться директивы SSI.

Как настроить выполнение скриптов CGI?

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

  1. В папке, в которой должны выполняться скрипты CGI, создайте файл.htaccess вида: Options +ExecCGI
    AddHandler cgi-script .cgi .pl Вместо “.cgi .pl” укажите список расширений, которые должны обрабатываться как скрипты.
  2. Загрузите скрипты в папку.
  3. С помощью Вашего файлового менеджера установите файлам скриптов права на выполнение (755).

Как изменить ограничение на использование оперативной памяти в PHP?

Для изменения ограничения на оперативную память используйте следующую директиву в.htaccess:

Php_value memory_limit 128M

Вместо 128M укажите желаемый размер ограничения. Обратите внимание, что символ “M” (латинская M) указывается слитно со значением.

Как сделать так, чтобы сайт всегда открывался по основному имени?

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

RewriteEngine on RewriteCond %{HTTP_HOST} ^www.site.com RewriteRule ^(.*) http://site.com/$1

Замените example.com на основное имя вашего сайта. Теперь при обращении к сайту пользователи будут автоматически перенаправлены на его основное имя.

Какие еще настройки PHP можно задавать в.htaccess?

В документации на сайте разработчика указан полный список директив PHP . В файле.htaccess можно изменять директивы, значение графы Changeable для которых соответствует PHP_INI_PERDIR или PHP_INI_ALL.

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 посылают браузеру соответствующий заголовок, и уже браузер осуществляет перенаправление.

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.

Похожие статьи