11
Авг

Волшебный файл .htaccess

Набирая адрес в строке браузера, вы получаете на свой компьютер файлы, которые отображает браузер. Управление тем, какие файлы и как вам показывать (пересылать) осуществляет веб-сервер. Наиболее популярных серверов два: IIS и Apache.
Как и любая программа, веб-сервер имеет определенные настройки. Но, у вас, как пользователя Апача может (и скорее всего не будет, если говорить о виртуальном хостинге) прав менять конфигурацию Апача через его главные файлы, действие которых распространяется на всех пользователей этого сервера. Но, вы можете менять некоторые конфигурационные файлы, который распространяют свое действие только на ваш сайт. Один из таких файлов - .htaccess

.htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess присутствует в любом каталоге пользователя.

Файл .htaccess может быть размещен в любом каталоге. Директивы этого файла действует на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).

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

   
Список всех доступных директив можно посмотреть тут.

 

Директивы простого перенаправления (редирект)


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

Redirect / http://www.example.com
# http://www.example.com - URL На который мы перенаправляем запросы

более сложный пример, мы хотим определенные страницы нашего сайта переадресовывать на другие сайты
 

Redirect /linux http://www.linux.org
Redirect /linux/download.html http://www.linux.org/dist/download_info.html
Redirect 301 /kernel http://www.linux.org

теперь при наборе http://mysite.ru/linux будут открываться http://www.linux.org. В последнем примере WEB сервер будет передавать код 301, что означает "документ перемещен постоянно".
Синтаксис команды Redirect выглядит следующим образом:
 

Redirect [status] URL_LOCAL URL_REDIRECT

status : необязательное поле, определяет код возврата, допустимые значения:

    * permanent (301 — документ перемещен постоянно)
    * temp (302 — документ перемещен временно)
    * seeother (303 — смотрите другой)
    * gone (410 — убран)

URL_LOCAL : локальная часть URL запрашиваемого документа.

URL_REDIRECT : URL куда должен быть выполнен редирект.

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

RedirectMatch /(.*)/(.*)/index.html$ http://mysite.ru/script.php?par1=$1&par2=$2

Хотя данный пример и вызовет перезагрузку страницы в дальнейшем его можно будет улучшить. Здесь необходимо сделать небольшое лирическое отступление и поговорить о синтаксисе регулярных выражений.

В регулярном выражении можно использовать любые печатные символы и пробел, но часть символов имеет особое значение:
 

Круглые скобки () используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру. Символ ^ обозначает начало строки. Символ $ обозначает конец строки. Символ . обозначает любой символ. Символ | обозначает альтернативу. Например, выражения "A|B" означают "A или B". Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать. Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд. Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз. Квадратные скобки [] используются для перечисления допустимых символов. Квадратные скобки [^] используются для перечисления недоступных символов. Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде. Все, что расположено после символа '#', считается комментарием.

Это все основные примитивы с помощью которых можно построить любое регулярное выражение.
 

Директивы сложного перенаправления (mod_rewrite)


Модуль mod_rewrite имеющийся в составе Apache — это мощнейшее, интеллектуальное средство преобразования URL адресов. С ним возможны почти все типы преобразований, которые могут выполняться или нет в зависимости от разных условий, факторов.

Данный модуль представляет собой основанный на правилах механизм (синтаксический анализатор с применением регулярных выражений), выполняющий URL преобразования на лету. Модуль поддерживает неограниченное количество правил и связанных с каждым правилом условий, реализуя действительно гибкий и мощный механизм управления URL. URL преобразования могут использовать разные источники данных, например переменные сервера, переменные окружения, HTTP заголовки, время и даже запросы к внешним базам данных в разных форматах, — для получения URL нужного вам вида.

Директива RewriteCond - определяет условие при котором происходит преобразование. RewriteCond определяет условия для какого-либо правила. Перед директивой RewriteRule располагаются одна или несколько директив RewriteCond. Следующее за ними правило преобразования используется только тогда, когда URI соответствует условиям этой директивы и также условиям этих дополнительных директив.

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

   
   

mysql.default_host

Устанавливает имя хоста базы данных.
Пример: php_value mysql.default_host localhost
 

mysql.default_user

Устанавливает имя пользователя базы данных
Пример: php_value mysql.default_user alexey
 

mysql.default_password

Устанавливает пароль пользователя базы данных
Пример: php_value mysql.default_password Hry5Gw2
 

display_errors

Разрешает вывод ошибок и предупреждений в браузер.
Пример: php_flag display_errors 0
 

display_startup_errors

Включает отображение ошибок, возникающих при запуске PHP.
Пример: php_flag display_startup_errors 0
 

error_reporting

Определяет типы (уровени важности) фиксируемых ошибок.
Пример: php_value error_reporting “E_ALL & ~E_NOTICE”
 

auto_prepend_file

Определение файла, который будет выводится в начале каждого php-скрипта. Путь указывается от корня файловой системы сервера.
Пример: php_value auto_prepend_file /www/server/prepend.php
 

auto_append_file

Определение файла, который будет выводится в конце каждого php-скрипта.
Пример: php_value auto_append_file /www/server/append.php
 

sendmail_from

Устанавливает e-mail отправителя, который применяется при отправке почтовых сообщений с помощью PHP.
Пример: php_value sendmail_from root@beget.ru
 

user_agent

Устанавливает строку User-agent, которая используется PHP при обращении к удаленным серверам.
Пример: php_value user_agent “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”
 

   
php_flag  display_errors 1
php_flag  display_startup_errors 1
php_value  error_reporting “E_ALL & ~E_NOTICE
   

$N

(0 <= N <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteRule (единственной, следующей сразу за текущим набором директив RewriteCond).
 

%N

(1 <= N <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteCond в текущем наборе условий.
 

%{NAME_OF_VARIABLE}

где NAME_OF_VARIABLE может быть одной из ниже приведенных переменных


Ниже приводится список всех доступных переменных %{NAME_OF_VARIABLE} с их кратким описанием.
 

   
   

mysql.default_host

Устанавливает имя хоста базы данных.
Пример: php_value mysql.default_host localhost
 

mysql.default_user

Устанавливает имя пользователя базы данных
Пример: php_value mysql.default_user alexey
 

mysql.default_password

Устанавливает пароль пользователя базы данных
Пример: php_value mysql.default_password Hry5Gw2
 

display_errors

Разрешает вывод ошибок и предупреждений в браузер.
Пример: php_flag display_errors 0
 

display_startup_errors

Включает отображение ошибок, возникающих при запуске PHP.
Пример: php_flag display_startup_errors 0
 

error_reporting

Определяет типы (уровени важности) фиксируемых ошибок.
Пример: php_value error_reporting “E_ALL & ~E_NOTICE”
 

auto_prepend_file

Определение файла, который будет выводится в начале каждого php-скрипта. Путь указывается от корня файловой системы сервера.
Пример: php_value auto_prepend_file /www/server/prepend.php
 

auto_append_file

Определение файла, который будет выводится в конце каждого php-скрипта.
Пример: php_value auto_append_file /www/server/append.php
 

sendmail_from

Устанавливает e-mail отправителя, который применяется при отправке почтовых сообщений с помощью PHP.
Пример: php_value sendmail_from root@beget.ru
 

user_agent

Устанавливает строку User-agent, которая используется PHP при обращении к удаленным серверам.
Пример: php_value user_agent “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”
 

   
php_flag  display_errors 1
php_flag  display_startup_errors 1
php_value  error_reporting “E_ALL & ~E_NOTICE
   
HTTP_USER_AGENT

Содержит информацию о типе и версии браузера и операционной системы посетителя.
 

HTTP_REFERER

Приводится адрес страницы, с которой посетитель пришёл на данную страницу.
 

HTTP_COOKIE

Список COOKIE передаваемых браузером
 

HTTP_FORWARDED

Страница непосредственно с которой перешел пользователь
 

HTTP_HOST

Адрес сервера, например beget.ru
 

HTTP_ACCEPT

Описываются предпочтения клиента относительно типа документа.
 

REMOTE_ADDR

IP-адрес посетителя.
 

REMOTE_HOST

адрес посетителя в нормальной форме — например, rt99.net.ru
 

REMOTE_IDENT

Имя удаленного пользователя. Имеет формат имя.хост, например, kondr.www.rtt99.net.ru
 

REMOTE_USER

То-же, что и REMOTE_IDENT, но содержит только имя. Пример: kondr
 

REQUEST_METHOD

Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к. определяет дальнейший способ обработки информации
 

SCRIPT_FILENAME

Полный путь к вебстранице на сервере.
 

PATH_INFO

Содержит в себе все, что передавалось в скрипт.
 

QUERY_STRING

Содержит строчку, переданную в качестве запроса при вызове CGI скрипта.
 

AUTH_TYPE

Используется для идентификации пользователя
 

DOCUMENT_ROOT

Cодержит путь к корневой директории сервера.
 

SERVER_ADMIN

Почтовый адрес владельца сервера, указанный при установке.
 

SERVER_NAME

Адрес сервера, типа kondr.beget.ru
 

SERVER_ADDR

IP-адрес вашего сайта.
 

SERVER_PORT

Порт на котором работает Apache.
 

SERVER_PROTOCOL

Версия HTTP протокола.
 

SERVER_SOFTWARE

Название сервера, например, Apache/1.3.2 (Unix)
 

TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME

 

Переменные предназначены для работы со временем в разных форматах.
 

API_VERSION

Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h.
 

THE_REQUEST

Полная строка HTTP запроса отправленная браузером серверу (т.е., «GET /index.html HTTP/1.1»). Она не включает какие-либо дополнительные заголовки отправляемые браузером.
 

REQUEST_URI

Ресурс, запрошенный в строке HTTP запроса.
 

REQUEST_FILENAME

Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.
 

IS_SUBREQ

Будет содержать текст «true» если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированы модулями которым нужно иметь дело с дополнительными файлами или URI для того чтобы выполнить собственные задачи.
 


Условие это шаблон условия, т.е., какое-либо регулярное выражение применяемое к текущему экземпляру "Сравниваемая Строка", т.е., "Сравниваемая Строка" просматривается на поиск соответствия Условие.

Помните: Условие это perl совместимое регулярное выражение с некоторыми дополнениями:

   
   

mysql.default_host

Устанавливает имя хоста базы данных.
Пример: php_value mysql.default_host localhost
 

mysql.default_user

Устанавливает имя пользователя базы данных
Пример: php_value mysql.default_user alexey
 

mysql.default_password

Устанавливает пароль пользователя базы данных
Пример: php_value mysql.default_password Hry5Gw2
 

display_errors

Разрешает вывод ошибок и предупреждений в браузер.
Пример: php_flag display_errors 0
 

display_startup_errors

Включает отображение ошибок, возникающих при запуске PHP.
Пример: php_flag display_startup_errors 0
 

error_reporting

Определяет типы (уровени важности) фиксируемых ошибок.
Пример: php_value error_reporting “E_ALL & ~E_NOTICE”
 

auto_prepend_file

Определение файла, который будет выводится в начале каждого php-скрипта. Путь указывается от корня файловой системы сервера.
Пример: php_value auto_prepend_file /www/server/prepend.php
 

auto_append_file

Определение файла, который будет выводится в конце каждого php-скрипта.
Пример: php_value auto_append_file /www/server/append.php
 

sendmail_from

Устанавливает e-mail отправителя, который применяется при отправке почтовых сообщений с помощью PHP.
Пример: php_value sendmail_from root@beget.ru
 

user_agent

Устанавливает строку User-agent, которая используется PHP при обращении к удаленным серверам.
Пример: php_value user_agent “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”
 

   
php_flag  display_errors 1
php_flag  display_startup_errors 1
php_value  error_reporting “E_ALL & ~E_NOTICE
   
Вы можете предварять строку шаблона префиксом '!' для указания несоответствия шаблону. '<Условие' (лексически меньше) '>Условие' (лексически больше) '=Условие' (лексически равно) '-d' (является ли каталогом) '-f' (является ли обычным файлом) '-s' (является ли обычным файлом с ненулевым размером) '-l' (является ли символической ссылкой) '-F' (проверка существования файла через подзапрос) '-U' (проверка существования URL через подзапрос)

Все эти проверки также могут быть предварены префиксом восклицательный знак ('!') для инвертирования их значения.

RewriteEngine включает или выключает работу механизма преобразования. Если она установлена в положение off этот модуль совсем не работает. Отметьте, что по-умолчанию, настройки преобразований не наследуются. Это означает что вы должны иметь RewriteEngine on директиву для каждого виртуального хоста в котором вы хотите использовать этот модуль.
Синтаксис RewriteEngine выглядит следующим образом:
 

RewriteEngine on | off

# По умолчанию RewriteEngine off

Используйте для комбинирования условий в правилах OR вместо AND. Типичный пример - перенавравление запросов на поддомены в отдельные каталоги.
 

RewriteEngine on

RewriteCond %{REMOTE_HOST} ^mysubdomain1.* [OR]
RewriteCond %{REMOTE_HOST} ^mysubdomain2.* [OR]
RewriteCond %{REMOTE_HOST} ^mysubdomain3.*
RewriteRule ^(.*)$ ^mysubdomain_public_html/$1

RewriteCond %{REMOTE_HOST} ^mysubdomain4.*
RewriteRule ^(.*)$ ^mysubdomain4_public_html/$1

Для выдачи главной страницы какого-либо сайта согласно «User-Agent:» заголовку запроса, вы можете использовать следующие директивы:
 

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /homepage.max.html [L]

RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^/$ /homepage.min.html [L]

RewriteRule ^/$ /homepage.std.html [L]

Для выдачи разных сайтов для разных браузеров согласно «User-Agent:» заголовку запроса, вы можете использовать следующие директивы:
 

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^(.*)$ /mozilla/$1 [L]

RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^(.*)$ /lynx/$1 [L]

RewriteRule ^(.*)$ /default/$1 [L]

Общий синтаксис директивы RewriteRule выглядит следующим образом:
 

RewriteRule Шаблон Подстановка [flag]

# flag - необязательное поле указывающее дополнительные опции

В подстановке вы можете использовать, в том числе, и специальные флаги путем добавления в качестве третьего аргумента директивы 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]'
(не экранировать URI при выводе)
Этот флаг не даёт mod_rewrite применять обычные правила экранирования URI к результату преобразования. Обычно, специальные символы (такие как '%', '$', ';', и так далее) будут экранированы их шестнадцатиричными подстановками ('%25', '%24', и '%3B', соответственно); этот флаг не дает это делать.

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

При наличии в файле .htaccess каких либо директив модуля mod_rewrite не наследуется ничего, а состояние по умолчанию выставляется таким же, как в главном конфигурационном файле веб-сервера (по умолчанию "off"). Поэтому, если нужны правила преобразования для конкретного каталога, то нужно еще раз вставить директиву "RewriteEngine on" в .htaccess для конкретного каталога.

При наследовании правил из верхних каталогов и добавлении к ним новых свойственных только данному каталогу - необходимо выставить в начале следующее: "RewriteEngine on" и "RewriteOptions inherit" - последняя директива сообщает серверу о продолжении.

При наследовании правил из верхних каталогов и добавлении к ним новых свойственных только данному каталогу - необходимо выставить в начале следующее: "RewriteEngine on" и "RewriteOptions inherit" - последняя директива сообщает серверу о продолжении.

Примеры использования mod_rewrite можно посмотреть тут

 

Индексные страницы


Когда пользователь заходит на хост например http://gentoo.org принято, что открывается индексный файл index.* при его отсутствии - либо содержимое каталога, либо ошибку 403 (FORBIDDEN) если опция отключена - запрещен просмотр директорий.

За листинг файлов отвечает директива Indexes (показывать посетителю список файлов, если в выбранном каталоге нет файла index.html или его аналога).

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

# Запрет выдачи листинга пустого каталога
Options -Indexes

А чтобы выдавал листинг, нужно:
 

Options Indexes

Если же понадобиться разрешить просматривать список файлов, но чтобы при этом чаcть файлов определенного формата не отображалась, то запишем:.
 

IndexIgnore *.php* *.pl

Выдает листинг каталога, т.е. его содержание со всем содержанием, за исключением файлов-скриптов PHP и Perl.

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

DirectoryIndex index.html index.shtml index.pl index.cgi index.php

Если же вы хотите что бы при обращении к каталогу открывался не index.html, а например, файл htaccess.php или /cgi-bin/index.pl:
 

DirectoryIndex htaccess.php /cgi-bin/index.pl



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


В ходе работы сервера иногда возникают ошибки, скорее это будет правильней назвать не сбоями в работе сервера, а стандартными кодами возврата оговоренными в стандарте HTTP_RFC2616. Вообще, в RFC ошибки называются "Status Codes", но мы их будем называть именно ошибками - так привычнее.

Код возврата - это трехзначное число, на основании которого можно судить о том, насколько успешно был обработан запрос. Код возврата начинающиеся на 1,2,3 считаются успешными, остальные причисляются к разряду ошибок.

 

 Вот список ошибок 4xx и 5xx :
        
 400 - Bad Request
 401 - Unauthorized
 402 - Payment Required
 403 - Forbidden
 404 - Not Found
 405 - Method Not Allowed
 406 - Not Acceptable
 407 - Proxy Authentication Required
 408 - Request Time-out
 409 - Conflict
 410 - Gone
 411 - Length Required
 412 - Precondition Failed
 413 - Request Entity Too Large
 414 - Request-URI Too Large
 415 - Unsupported Media Type
 500 - Internal Server Error
 501 - Not Implemented
 502 - Bad Gateway
 503 - Service Unavailable
 504 - Gateway Time-out
 505 - HTTP Version not supported

При возникновении ошибки 4xx или 5xx посетитель Вашего сайта увидит в браузере сообщение от сервера, которое врядlли можно назвать предельно понятным рядовому пользователю. Apache предоставляет возможность выдать вместо аскетичного технического текста, не изобилующего деталями, свою страницу, где Вы можете человеческим языком объяснить пользователю, что произошло и что делать.

Пример переопределения страниц ошибок приведен ниже:
 

# содержание файла .htaccess:
ErrorDocument 404 http://bg10.ru/error/404.htm
ErrorDocument 403 http://bg10.ru/error/403.htm
ErrorDocument 400 http://bg10.ru/error/400.htm
ErrorDocument 500 http://bg10.ru/error/500.htm

# в случае ошибки "FORBIDDEN" показывается текстовое сообщение, которое
# обязательно должно начинаться с кавычки, кавычка в сообщении не выводится:

ErrorDocument 403 "Sorry can't allow you access today, 403 Status Codes Apache"

Более подробно об обработке ошибок можно прочитать в документации по Apache на странице "Custom error responses".

Кодировка


Иногда браузер пользователя не может корректно определить тип кодировки выдаваемого документа. Для решения этой проблемы используемая кодировка указывается в настройках Web сервера Apache и заголовке передаваемого документа. Причем для корректного распознания эти кодировки должны совпадать. На наших серверах по умолчанию используется кодировка cp1251

В HTML для указания кодировки используется тег:
 

<meta http-equiv="content-type" content="text/html; charset=Windows-1251">

Наиболее часто встречаются типы кодировки для русского языка передаваемые в заголовке документа:

Windows-1251 - Кириллица (Windows). KOI8-r - Кириллица (КОИ8-Р) cp866 - Кириллица (DOS). Windows-1252 - Западная Европа (Windows). Windows-1250 - Центральная Европа (Windows). UTF-8 - двух байтовая кодировка

Теперь рассмотрим указание кодировки по умолчанию через .htaccess. AddDefaultCharset задает дефолтную таблицу символов (кодировку) для всех выдаваемых страниц на веб сервере Apache. Указываем кодировку на все файлы, в которой по умолчанию получает документы браузер:
 

AddDefaultCharset WINDOWS-1251

При загрузке файла на сервер, возможна перекодировка, его - указываем, что все получаемые файлы будут иметь кодировку windows-1251, для того что бы указать кодировку на загружаемые файлы напишем:
 

CharsetSourceEnc WINDOWS-1251

Если необходимо отменить перекодировку сервером файлов:
 

CharsetDisable on


Управление доступом


Очень часто возникает необходимость запретить доступ к определенным файлам или папкам для определенных груп пользователей. В Web сервере Apache есть встроенные средства для решения данной проблемы.

Для запрета или разрешения доступа ко всем файлам и папкам в текущей и во всех вложенных директориях используется директива Order синтаксис ее очень прост:
 

Order
 

Комментарии

Rss-лента комментариев к этому посту
1
строитель плотастроитель плота15.03.2011У меня так и не получилось подменять файл без редиректа. Наверное, полностью понять как устроен mod_rewrite невозможно ;) Так что пока решил вопрос по-другому. За материал - спасибо!

Оставьте свой комментарий

Заменить картинку
жирный курсив цитата

С правилами ознакомлен
 

Правила публикования комментариев
1. Не информативные комментарии вида "Спасибо, замечательная статья", имеющие ссылку на сайт, скорее всего будут удалены.
2. В поле "сайт" указывается ссылка на главную страницу сайта для людей.
Владелец этого блога незамедлительно удалит спам в любом его проявлении.