.htaccess - краткое руководство | Альтернативный Форум

.htaccess - краткое руководство

  • Автор темы Автор темы metallphilin
  • Дата начала Дата начала
M

metallphilin

НЛО опубликовал
Обработчик ошибок.
Иногда при каких-либо обращениях к вашему сайту возникает ошибка (ну наибольшей популярностью, скорей всего пользуется 404 - файл не найден, но бывают и другие). Вы можете написать директиву, которая скажет серверу какую страницу запустить при возникновении той или иной ошибки вместо стандартного сообщения об ошибке.:
ErrorDocument NNN имя_файла
где NNN - номер ошибки (см. ниже),
имя_файла - абсолютный путь к файлу, который надо загрузить вместо стандартного сообщения об ошибке.
Список ошибок:
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 (сервер отказывается принимать запрос без определенного Content-Length)
412 - Precondition Failed (при проверке на сервере одного или более полей заголовка запроса обнаружено несоответствие)
413 - Request Entity Too Large (размер запроса больше того, что может обработать сервер)
414 - Request-URI Too Large (Request-URI превышает размеры, которые может обработать сервер)
415 - Unsupported Media Type
500 - Internal Server Error (сервер начал сбоить по неизвестной причине)
501 - Not Implemented (сервер не поддерживает возможностей, необходимых для обработки запроса)
502 - Bad Gateway (ошибочный ответ от подчиненного сервера)
503 - Service Unavailable (сервер перегружен)
504 - Gateway Time-out (работая в режиме шлюза или proxy, сервер не получил вовремя ответ от сервера верхнего уровня)
505 - HTTP Version not supported (не поддерживается http)
Например:
ErrorDocument 404 /err.html
Настройка файла по умолчанию.
Как правило файл, который открывается при обращении к каталогу, если не указано непосредственно имя (ну например, обращение типа Link hidden, please Sign in or Sing up) назван index.htm или index.html или index.shtml и т.п. Иногда бывает необходимо назвать его по-другому, например start.html.
Для этого необходимо написать такую строчку:
DirectoryIndex имя_файла
где имя_файла - имя файла, которое вы хотите назначить. Можно перечислить несколько имен через пробел
Например:
DirectoryIndex start.html /php/start.php
Будет грузиться start.html, а в каталоге php - файл start.php
Настройка вывода листинга
Если в каком то из ваших каталогов нет индексного файла, а пользователь обратился к этому каталогу, то сервер выдаст пользователю список файлов в каталоге (листинг).
Можно настроить как сам вид листинга, так и то, что там можно выводить, а что нельзя.
Options -Indexes
Если вы напишите эту строчку, то листинг вообще выдаваться не будет.
Options Indexes
разрешение выдачи листинга.
IndexIgnore файлы
Для задания набора файлов, которые не будут выводиться в листинге (можно использовать регулярные выражения).
Например.
IndexIgnore *.jpg
HeaderName HEADER
Имя (в нашем примере HEADER), который будет выводиться в заголовке листингов.
Кодировка
CharsetDefault кодировка
Кодировка в которой сервер выдает браузеру документы по умолчанию.
Например,
CharsetDefault windows-1251
CharsetSourceEnc кодировка
Кодировка, в которой вы должны закачивать файлы на сервер (по умолчанию koi -8r,).
Например,
CharsetSourceEnc windows-1251
Имитация директорий и файлов
Options Multiviews
Если вы написали эту строчку, то тогда при задании адреса ваш сайт/news/2002 сервер будет искать файл с именем "news" и с любым расширением. Найденный с наибольшим совпадением файл (? на счет совпадений, это таинственно) он обработает с его типом mime, то есть если есть news.php, а набран адрес /news/, то сервер отдаст адрес на обработку php. Ну а уже в самом файле news.php можно написать обработку запроса (анализировать переменную $REQUEST_URI) и выдать новости именно за 2002 год.
Разрешение и запрет на просмотр сайта
Директива deny позволяет ограничить доступ к вашему сайту (или его подкаталогам) определенным пользователям. Директива allow наоборот разрешает доступ к сайту и его узлам. Приорететность запрета и разрешения определяются директивой order.
Если вам надо разрешить доступ к сайту почти всем пользователям за исключением нескольких, то надо писать Order allow, deny
Если наоборот, запретить доступ к сайту почти всем пользователям за исключением некоторых, то напишите Order deny, allow
Кому именно запрещен или разрешен доступ указывается конкретно:
Deny from адрес
где адрес - можно указать All - всем пользователям,
можно указать ip адрес (или несколько ip-адресов через пробел),
можно указать частичный ip-адрес (для определения подсети, с которой запрещен доступ),
можно указать имя домена (например, deny from .com)
Синтаксис для Allow аналогичен.
Директивы Order, Deny, Allow надо объединить в группу.
Записанное все вместе выглядит так:
< Limit GET/>
Order allow,deny
Deny from 195.13.12.9
Allow from All
Это означает, что доступ к директориям сайта разрешен для всех пользователей кроме пользователей с ip-адресом 195.13.12.9
Но можно запретить или разрешить доступ к сайту на основании существования или отсутствия переменной окружения. Это удобно при настройки страниц, заданных в соответствии с особенностями браузера.
Задается это так:
Allow from env=переменная окружения
или
Deny from env=переменная окружения
Переадресация
Переадресацию можно задавать различными способами, но можно и директивой Redirect в файле .htaccess
Например, необходимо, если пользователь обратился к каталогу img/ его перенаправить на другую страницу. Для этого необходимо написать:
Redirect /img куда_то_там где куда_то_там - собственно куда вы хотите перенаправить.
Переопределение типов файлов
Браузер распознает какой документ (соответственно, как его надо отображать, как html, или как картинку, или еще как) на основании так называемого mime типа. Каждому файлу, который обрабатываются веб-сервером, можно задать определенный тип.
Наиболее распространенные:
Определение расширение mime-тип
HTML-документ html htm text/html
Flash-документ swf application/x-shockwave-flash
PHP-документ php application/x-httpd-php
Обычный текст asc txt text/plain
Архив ZIP zip application/zip
Файл MS Word doc application/msword
Файл MS Excel xls application/vnd.ms-excel
VRML-файлы wrl vrml model/vrml
Картинки gif gif image/gif
Картинки jpeg jpeg jpg jpe image/jpeg
Если у вас есть файлы с неизвестным для браузера расширением, а вы хотите, чтобы он их понимал, то тип файлов можно определить с помощью директивы
AddType "тип" расширение
Например, если вы хотите, чтобы ваши файлы с расширением .my браузер воспринимал как обычные html файлы, то укажите
AddType "text/html" .my
AddType application/x-httpd-php .html
Если вы напишите такую строчку, то файлы с расширением html будут восприниматься, как php -скрипты. (Ну, например, так сделано на нашем сайте)
DefaultType mime-тип
Задает тип документа по умолчанию, который будет пользоваться тогда, кода сервер не сможет найти соответствие
Например
DefaultType text/plain
Проверка на SSI
Обычно сисадмины настраивают сервер так, что ssi вставки работают в файлах с расширением shtml или shtm.
Но если на вашем сайте нужно, чтобы сервер проверял файлы на наличие ssi вставок и файлы с другим расширением, вам надо написать такую строчку:
AddHandler server-pavsed расширение
где расширение - перечислить через пробел нужные расширения файлов.
Например
AddHandler server-pavsed .html .shtml
Только не смешивайте в одном файле ssi и php.
Автоматическое подключение обработчика
Вы можете задать путь к файлу, содержащий код PHP, который будет выполняться перед запуском любого сценария. Это задается директивой
Auto_prepend_file путь_к_файлу
где путь_к_файлу - физический путь к нужному нам сценарию.
Необходимо знать физический каталог на сервере, который соответствует вашему, где лежит ваш сайт. Для этого достаточно запустить такой сценарий:
(обзовите файл test.php, напишите там этот сценарий и вызовите его из головного каталога вашего сайта).
Например, у вас $DOCUMENT_ROOT=/home/site2/www
Вам необходимо присоединить к каждому сценарию на php некий сценарий, названный mylib.phl, который лежит у вас в каталоге library Тогда вам необходимо в файле .htaccess написать строчку:
Auto_prepend_file /home/site2/www/library/mylib.phl
(В общем это замена include, который вам пришлось бы вставлять в начале каждого вашего файла).
Аналогичная директива, только заданный сценарий присоединяется к концу вашего:
Auto_append_file путь_к_файлу
Гораздо интереснее директива, запускающая ваш обработчик (т.е. сценарий, который запускается сервером при попытке пользователя открыть страницу определенного типа).
Для этого надо указать следующее:
Связать имя обработчика с конкретным файлом
Action mylib "/library/mylib.php?"
где mylib -имя вашего обработчика (придумываете сами)
/library/mylib.php? - абсолютный (т.е. относительня корневого каталога, без указания имени хоста и порта) путь к самому файлу с вашим обработчиком.
Знак ? говорит серверу, что исходный URL следует передать обработчику методом GET, т.е. через $QUERY_STRING.
Дальше надо указать серверу, какие именно файлы следует пропускать через обработчик (например, все файлы с расширением html):
AddHandler mylib .html
Итак получаем 2 строчки:
Action mylib "/library/mylib.php?"
AddHandler mylib .html
Пример.
На нашем сайте обработчиком обрабатываются все файлы с расширением html и php5. Задано это у нас так:
Action girlshandler "/script/template/shablon.php?"
AddHandler girlshandler .html .php5

Спасибо stOkoNу
 
Назад
Верх Низ