Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_dir

Описание: Обеспечивает переадресацию с «косой чертой» и предоставление файлов индекса каталога
Статус: Базовый
Идентификатор модуля: dir_module
Файл исходного кода: mod_dir.c

Резюме

Индекс каталога может поступать из одного из двух источников:

  • Файл, созданный пользователем, обычно с именем index.html. Направление DirectoryIndex задаёт имя этого файла. Это контролируется mod_dir.
  • В противном случае, список, сгенерированный сервером. Это обеспечивается mod_autoindex.

Эти две функции разделены, чтобы вы могли полностью убрать (или заменить) автоматическое создание индекса, если захотите.

Переадресация с «косой чертой» выполняется, когда сервер получает запрос на URL http://servername/foo/dirname, где dirname является каталогом. Каталоги требуют косой черты в конце, поэтому mod_dir выполняет переадресацию на http://servername/foo/dirname/.

Директива DirectoryCheckHandler

Описание: Включение/выключение реакции модуля при конфигурации другого обработчика
Синтаксис:
DirectoryCheckHandler On|Off
Значение по умолчанию:
DirectoryCheckHandler Off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: Индексы
Статус: Базовый
Модуль: mod_dir
Совместимость: Доступно начиная с версии 2.4.8 и более поздних. Выпуски до 2.4 неявно действуют так, как будто указано «DirectoryCheckHandler ON».

Директива DirectoryCheckHandler определяет, должен ли mod_dir проверять наличие индексов каталога или добавлять косую черту в конце, когда для текущего URL сконфигурирован другой обработчик. Обработчики могут устанавливаться с помощью таких директив, как SetHandler, или другими модулями, например, mod_rewrite во время замещений по каталогам.

В выпусках до 2.4 этот модуль не предпринимал никаких действий, если для URL был сконфигурирован другой обработчик. Это позволяет отображать индексы каталогов даже при указании директивы SetHandler для всего каталога, но это также может привести к некоторым конфликтам с модулями, такими как mod_rewrite.

Директива DirectoryIndex

Описание: Список ресурсов, которые следует искать при запросе клиентом каталога
Синтаксис:
DirectoryIndex disabled | local-url [local-url] ...
Значение по умолчанию:
DirectoryIndex index.html
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: Индексы
Статус: Базовый
Модуль: mod_dir

Директива DirectoryIndex устанавливает список ресурсов, которые нужно искать, когда клиент запрашивает индекс каталога, указав / в конце имени каталога. Local-url — (%-кодированный) URL документа на сервере, относительный к запрошенному каталогу; обычно это имя файла в каталоге. Можно указать несколько URL, и сервер вернёт первый найденный. Если ни один из ресурсов не существует, а опция Indexes установлена, сервер сгенерирует собственный список каталога.

Пример

DirectoryIndex index.html

тогда запрос на http://example.com/docs/ вернёт http://example.com/docs/index.html если оно существует, или выведет список каталога, если нет.

Обратите внимание, что документы не обязательно должны быть относительными к каталогу;

DirectoryIndex index.html index.txt  /cgi-bin/index.pl

вызовет выполнение CGI-скрипта /cgi-bin/index.pl если ни index.html ни index.txt не существует в каталоге.

Единственный аргумент «disabled» предотвращает поиск индекса mod_dir. Аргумент «disabled» будет интерпретирован буквально, если у него есть аргументы перед или после него, даже если они также «disabled».

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

# Example A: Set index.html as an index page, then add index.php to that list as well.
<Directory "/foo">
    DirectoryIndex index.html
    DirectoryIndex index.php
</Directory>

# Example B: This is identical to example A, except it's done with a single directive.
<Directory "/foo">
    DirectoryIndex index.html index.php
</Directory>

# Example C: To replace the list, you must explicitly reset it first:
# In this example, only index.php will remain as an index resource.
<Directory "/foo">
    DirectoryIndex index.html
    DirectoryIndex disabled
    DirectoryIndex index.php
</Directory>

Директива DirectoryIndexRedirect

Описание: Настройка внешней переадресации для индексов каталогов.
Синтаксис:
DirectoryIndexRedirect on | off | permanent | temp | seeother | 3xx-code
Значение по умолчанию:
DirectoryIndexRedirect off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: Индексы
Статус: Базовый
Модуль: mod_dir
Совместимость: Доступно начиная с версии 2.3.14 и более поздних

По умолчанию DirectoryIndex выбирается и возвращается клиенту прозрачно. DirectoryIndexRedirect вместо этого вызывает внешнюю переадресацию.

Аргумент может быть:

  • on: выполняет переадресацию 302 к ресурсу индекса.
  • off: не выполняет переадресацию. Это поведение mod_dir по умолчанию.
  • permanent: выполняет постоянную переадресацию 301 к ресурсу индекса.
  • temp: имеет тот же эффект, что и on
  • seeother: выполняет переадресацию 303 (также известную как «See Other») к ресурсу индекса.
  • 3xx-code: выполняет переадресацию с выбранным кодом 3xx.

Пример

DirectoryIndexRedirect on

Запрос на http://example.com/docs/ вернёт временную переадресацию на http://example.com/docs/index.html если он существует.

Директива DirectorySlash

Описание: Включение/выключение переадресаций с косой чертой в конце
Синтаксис:
DirectorySlash On|Off
Значение по умолчанию:
DirectorySlash On
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: Индексы
Статус: Базовый
Модуль: mod_dir

Директива DirectorySlash определяет, должен ли mod_dir исправлять URL, указывающие на каталог.

Обычно, если пользователь запрашивает ресурс без косой черты в конце, который указывает на каталог, mod_dir перенаправляет его на тот же ресурс, но с косой чертой по нескольким причинам:

  • Пользователь, наконец, запрашивает канонический URL ресурса
  • mod_autoindex работает правильно. Поскольку он не выводит путь в ссылке, он будет указывать на неправильный путь.
  • DirectoryIndex будет оцениваться только для каталогов, запрошенных с косой чертой.
  • Относительные ссылки URL в HTML-страницах будут работать правильно.

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

# see security warning below!
<Location "/some/path">
    DirectorySlash Off
    SetHandler some-handler
</Location>

Предупреждение о безопасности

Отключение переадресации с косой чертой может привести к раскрытию информации. Рассмотрим ситуацию, где mod_autoindex активна (Options +Indexes) и DirectoryIndex установлена на допустимый ресурс (скажем, index.html) и для этого URL не определён другой обработчик. В этом случае запрос с косой чертой покажет файл index.html. Но запрос без косой черты выведет содержимое каталога.

Также обратите внимание, что некоторые браузеры могут ошибочно изменять запросы POST на GET (тем самым удаляя данные POST) при выполнении переадресации.

Директива FallbackResource

Описание: Определение URL по умолчанию для запросов, которые не отображаются в файле
Синтаксис:
FallbackResource disabled | local-url
Значение по умолчанию:
disabled - httpd will return 404 (Not Found)
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: Индексы
Статус: Базовый
Модуль: mod_dir
Совместимость: Аргумент disabled доступен начиная с версии 2.4.4 и более поздних

Используйте эту директиву, чтобы установить обработчик для любого URL, который не соответствует ничего в вашей файловой системе и в противном случае вернёт HTTP 404 (Не найдено). Например

FallbackResource /not-404.php

вызовет обработку запросов на несуществующие файлы not-404.php, в то время как запросы на существующие файлы останутся без изменений.

Часто бывает желательно, чтобы один файл или ресурс обрабатывал все запросы к определённому каталогу, за исключением запросов, соответствующих существующему файлу или скрипту. Это часто называется «фронтальным контроллером».

В более ранних версиях httpd это обычно требовало mod_rewrite, и использования тестов -f и -d для проверки существования файлов и каталогов. Теперь это требует только одной строки конфигурации.

FallbackResource /index.php

Существующие файлы, такие как изображения, файлы CSS и т. д., будут отображаться обычно.

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

В под-URI, таком как http://example.com/blog/, этот под-URI должен быть предоставлен как local-url:

<Directory "/web/example.com/htdocs/blog">
    FallbackResource /blog/index.php
</Directory>
<Directory "/web/example.com/htdocs/blog/images">
    FallbackResource disabled
</Directory>

Обработчик по умолчанию (в данном случае /blog/index.php) может получить доступ к исходному запрошенному URL через переменную сервера REQUEST_URI. Например, для доступа к этой переменной в PHP используйте $_SERVER['REQUEST_URI'].

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_dir.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API