Испокон веков в Apache (внимание! речь идёт об Apache 1.x) существует модуль
mod_autoindex -
в комментариях в его исходном коде есть дата, видимо написания первой версии
- 23 марта 1993 года. С тех пор модуль, очевидно, претерпевал какие-то изменения,
но с 1993 года форматирование вряд ли изменилось - всё тот же тег PRE.
С 1993 года HTML обогатился таблицами и каскадными стилями (CSS). Вряд ли сейчас
кто-то использует браузеры не знающие что это такое, странно, что для вывода
информации в модуле mod_autoindex до сих пор используется PRE. Сам по себе
модуль очень неплох - он позволяет быстро (часто для этого вообще ничего
не надо делать - просто убрать индексный файл из папки) организовать файловые
архивы, а главное -
организовать их без использования относительно медленного скриптинга, что
может часто бывает критично для сервисов, пользующихся большой популярностью.
В моём портфолио есть несколько проектов, где приходилось изобретать какие-то
вещи (где-то, наверняка, велосипеды, знания о всех готовых решениях у меня нет)
для улучшения производительности. Как я уже сказал, для огранизации файловых
архивов иногда очень удобно использовать модуль mod_autoindex. Удобно, да
вот незадача - владельцу сервиса, как правило, помимо производительности
важна такая вещь как дизайн, оформление.
Стандартный модуль Apache позволяет менять, в этом плане:
- header, т.е. часть над списком файлов (HeaderName, SuppressHTMLPreamble)
- footer, часть под списком файлов (ReadmeName)
- размер иконок (IconWidth, IconHeight)
- внешний вид иконок (AddIcon, AddIconByType, AddIconByEncoding)
- убирать из списка некоторые столбцы (SuppressLastModified, SuppressSize, SuppressDescription)
- изменять описание файла (AddDescription)
- и весьма ограниченно менять внешний вид выводимой информации (FoldersFirst, SuppressColumnSorting и т.п.)
Чаще всего этого для "упаковки" списка файлов в дизайн очень мало. Для облегчения
задачи интеграции вывода mod_autoindex в дизайн я несколько усовершенствовал
этот модуль. Всё по порядку.
Что умеет новый модуль

- Режим FancyIndex всегда включен и не выключается. Вряд ли найдётся много людей
не использующих этот режим.
- В основном режиме (об этом подробнее - чуть ниже) таблица файлов выводится при
помощи тега TABLE, где у большинства объектов (например, у первой строка, чётных
и нечётных строк) прописаны идентификаторы CSS-классов, из чего следует, что внешний
вид таблицы вы легко сможете задать при помощи файла стилей.
- Новая опция, позволяющая включить в листинг файла ссылку на корень сайта
(IndexOptions +RootFolder, при использовании не забудьте добавить иконку,
например так: "AddIcon /icons/back.gif .")
- Появилась возможность перенести Description в отдельную (новую) строку
(IndexOptions +DescriptionAtNewRow)
- Появилась возможность локализовать (перевести на родной язык) текстовую
информацию модуля (директивы ParentStr, RootStr, NameStr, SizeStr, DescriptionStr, LastModifiedStr).
- С первой страницы (если пользователь находится в корне сайта) убрана
ссылка "Parent Directory", ведущая в этом случае, на ту же самую страницу.
- Появился новый режим вывода, основанный на теге SPAN (именно он на иллюстрации),
в частности, количество иконок в строке в этом режиме зависит от ширины окна браузера
(IndexOptions +BoxWidth=N +BoxHeight=N +MaxIconHeight=N)
Новый режим вывода
Новый режим вывода включается автоматически, если были использованы параметры BoxWidth и
BoxHeight. Эти два параметра отвечают за размер прямоугольника, в который заключена
иконка (на иллюстрации
выделено чёрным) и, по сути, определяют расстояние между соседними иконками.
Размер этот нужно выбирать исходя из размеров иконки, текста названия файла и строки,
где выводится размер файла, плюс некоторое пространство, необходимое для обеспечения
зазора между соседними иконками. Есть ещё один параметр - MaxIconHeight, выбрать его
просто - это всего лишь максимальная высота иконки в вашем наборе. Нужен этот параметр для
того, чтобы подписи к иконкам располагались на одном уровне (на иллюстации - синяя линия).
В этом режиме под иконкой выводится имя файла, размер и дата модификации (если, конечно,
не были использованы опции SuppressLastModified и SuppressSize), описание
файла выводится в аттрибут "title" тега SPAN, охватывающего иконку и надписи
(если не была использована опция SuppressDescription) - вы можете использовать DHTML,
чтобы выводить информацию из title в статусную строку, всплывающую подсказку и т.п.
ПримерФайлы для вывода информации так, как это изображено на иллюстрации выглядят так:
Файл ".htaccess":
IndexOptions +SuppressHTMLPreamble +NameWidth=*
IndexOptions +SuppressLastModified +FoldersFirst +RootFolder +DescriptionWidth=*
IndexOptions +BoxWidth=80 +BoxHeight=80 +MaxIconHeight=33
HeaderName /_bolk_autoindex/.HEADER.html
ReadmeName /_bolk_autoindex/.FOOTER.html
ParentStr "Наверх"
RootStr "В корень"
NameStr "Имя"
SizeStr "Размер"
DescriptionStr "Описание"
Файл ".HEADER.html":
<head>
<title></title>
<style type="text/css">
td,
body { background-color: white; font-family: Verdana,Tahoma; font-size:10px }
a { color: black; text-decoration:none }
.cell0, .cell1 {text-align: center}
a:hover { text-decoration: underline }
</style>
</head>
<body>
<h4>Пример использования</h4>
Содержимое каталога:
<!--#echo var="DOCUMENT_URI" encoding="none" -->
<br clear="all" /><br />
Файл ".FOOTER.html":
</body>
Где взять и как установитьФайл можно
взять у меня
на сайте (ZIP, около 15Кб), для установки нужно переписать его на место старого
модуля (каталог src/modules/standard) и перекомпилировать Apache.
Проблемы и их решенияЧасто, помимо имени файла, его размера и даты создания, хочется вывести другую полезную
информацию - например, разрешение для картинок, ID3 теги для MP3 файлов и так далее.
Для этой цели я рекомендую воспользоваться полем "Description" и директивой
"AddDesription". Задачей модуля не является и, надеюсь, не будет являться (иначе
это приведёт к снижению производительности) автоматический вывод информации такого рода.
Напишите скрипт (кстати, возможно позднее я его выложу), который пробежит по каталогам и добавит
эту информацию в соответствующие .htaccess файлы и вызывайте его далее по мере необходимости.
Один из заказчиков попросил предоставить пользователю возможность самому выбирать какой
вид листинга файлов он хочет получить - табличный или в виде иконок. К сожалению,
у Apache 1.x нет методов переключения конфигурации в зависимости от каких-то внешних
условий "на лету", так что было выбрано такое решение. На портах 80 и 443 (обычно
используется для HTTPS-соединений) были заведены два виртуальных хоста:
<VirtualHost example.com:80>
...
AccessFileName .htaccess .htaccess-table
...
</VirtualHost>
<VirtualHost example.com:443>
...
AccessFileName .htaccess .htaccess-icons
...
</VirtualHost>
где прописаны одно общее имя .htaccess-файла для общих настроек и деректив
AddDescription и два разных имени для различных наборов настроек
mod_autoindex. Переключение происходит перенаправлением пользователя на определённый
порт.
Хотелось бы ещё...По всем вопросам, с пожеланиями по улучшению - добро пожаловать в мой почтовый
ящик, он есть на моём сайте внизу каждой страницы.