Модуль 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