Пункт 135. Модуль Apache mod_dir
Индекс каталога может поступать из одного из двух источников:
- Файл, написанный пользователем, обычно называемый
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 — это (%-encoded) 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-bin/index.pl к выполнению сценария CGI, если ни один из index.html них не index.txt
существует в каталоге.
Единственный аргумент «отключено» предотвращает mod_dir поиск индекса. Аргумент «отключено» будет интерпретироваться буквально, если перед ним или после него есть какие-либо аргументы, даже если они также «отключены».
Примечание. Несколько DirectoryIndex
директив в одном контексте будут добавляться в список ресурсов для поиска, а не замены:
# Пример A: Установите index.html в качестве индексной страницы, а затем добавьте index.php в этот список.
<Каталог "/foo">
DirectoryIndex index.html
DirectoryIndex index.php
</Каталог>
# Пример B: идентичен примеру A, за исключением того, что он выполняется с помощью одной директивы.
<Каталог "/foo">
DirectoryIndex index.html index.php
</Каталог>
# Пример C: Чтобы заменить список, вы должны сначала явно сбросить его:
# В этом примере в качестве ресурса индекса останется только index.php.
<Каталог "/foo">
DirectoryIndex index.html
DirectoryIndex отключен
DirectoryIndex index.php
</Каталог>
Директива 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 (также известное как «Просмотреть другое») на индексный ресурс.
- 3xx-код : выполняет перенаправление, отмеченное выбранным кодом 3xx.
Пример
DirectoryIndexRedirect на
Запрос 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-страниц будут работать правильно.
Если вы не хотите этого эффекта и причины, указанные выше, к вам не относятся, вы можете отключить перенаправление, как показано ниже. Однако имейте в виду, что это может иметь последствия для безопасности.
# см. предупреждение о безопасности ниже!
<Расположение "/некоторые/путь">
Слэш-каталог выключен
SetHandler какой-то обработчик
</местоположение>
Предупреждение безопасности
Отключение переадресации косой черты в конце может привести к раскрытию информации. Рассмотрим ситуацию, когда 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 (не найдено). Например
Резервный ресурс /not-404.php
приведет к тому, что запросы на несуществующие файлы будут обрабатываться
not-404.php , в то время как запросы на существующие файлы останутся без изменений.
Часто желательно, чтобы один файл или ресурс обрабатывал все запросы к определенному каталогу, за исключением тех запросов, которые соответствуют существующему файлу или сценарию. Его часто называют «передним контроллером».
В более ранних версиях httpd этот эффект обычно требовал
mod_rewrite , а также использование -f и
-d проверки существования файлов и каталогов. Теперь для этого требуется только одна строка конфигурации.
Резервный ресурс /index.php
Существующие файлы, такие как изображения, файлы css и т. д., будут обслуживаться в обычном режиме.
Используйте disabled аргумент, чтобы отключить эту функцию, если наследование от родительского каталога нежелательно.
В суб-URI, таком как http://example.com/blog/, этот
суб-URI должен быть указан как local-url :
<Каталог "/web/example.com/htdocs/blog">
Резервный ресурс /blog/index.php
</Каталог>
<Каталог "/web/example.com/htdocs/blog/images">
Резервный ресурс отключен
</Каталог>