Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_dir

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

Сводка

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

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

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

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

Директива DirectoryCheckHandler

Описание: Переключает режим ответа модуля при настройке другого обработчика
Синтаксис:
DirectoryCheckHandler On|Off
Значение по умолчанию:
DirectoryCheckHandler Off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: Indexes
Статус: Базовый
Модуль: 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
Переопределение: Indexes
Статус: Базовый
Модуль: 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
Переопределение: Indexes
Статус: Базовый
Модуль: 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

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

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

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

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

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

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

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

Отключение перенаправления для URL без косой черты в конце может привести к раскрытию информации. Рассмотрим ситуацию, в которой активен 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
Переопределение: Indexes
Статус: Базовый
Модуль: mod_dir
Совместимость: Аргумент disabled доступен в версии 2.4.4 и более поздних

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

FallbackResource /not-404.php

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

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

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

FallbackResource /index.php

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

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

Для под-URI, например http://example.com/blog/, в качестве local-url необходимо указать этот под-URI:

<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