Використовую сервер в т.ч. і як файлсторе, і торенти туди стягаю, потім в спокійній обстановці скачую собі на локальне зберігання, і людям файли заливаю. Зазвичай, при відсутності індексного файла, апач виводить вміст каталогу в браузер. Так і я браузив свої коморки, і вибирав лінки для закачки, лише не тішив чомусь вигляд (Рис. 1.) Поведу розмову, як добивався приємнішого вигляду, це буде корисно не лише молодим адмінам :), а і власникам сайтів, так як всі поради застосовні і в оточенні шаред хостингу, через файл .htaccess. В ідеалі можна добитись просто невпізнаваності, є і така практика використання. Перевага такого рішення – неймовірна економія ресурсів, і простота.
Якийсь дефолтний напівжах. В межах реалізації проекту продуктивного затишного сервера, яким ще і люди користуватимуться таке теприпустимо.
Почав розбиратись, що й до чого. Індекс генерує модуль апача mod_autoindex, з настройками якого і потрібно бавцятись. Далі дивним було, чому значки файлів не показуються, якщо мали би (Рис. 2.)
Як виявилось, тут неув’язочка з nginx, тому все в комплексі і почав розрулювати.
По дефолту іконки посилаються на набір гіфок для кожного з типів файлів. Гіфки лежать у /icons/, тобто, виглядає, ніби потрібно покласти в корінь хоста ці значки, і буде радість. Та не все так просто. Насправді, існує ще один модуль – mod_alias, який (теж по дефолту) аліасить звернення з /icons/ до /usr/share/apache2/icons, принаймні в Debian. Модуль цікавий дуже, його багато для чого можна застосувати, і саме завдяки йому на всіх хостах при перегляді змісту каталогу є іконки, і шлях до них виглядає, ніби вони лежать в корені хоста.
В моєму випадку mod_alias не працював, так як перед apache запити обробляв nginx, і згідно попередньо визначених правил, статику віддає самотужки. А як її віддати, коли на місці немає? Одне питання. Потім друге. Дефолтні значки досить страшні, і хотілось би їх змінити на інші. А ще третє якось би css приліпити…
Щоб змінити значки, можна тупо замінити файли в /usr/share/apache2/icons іншими і тішитись. Але це неспортивно, в файлову структуру не хочеться лізти, формат gif то вже минуле століття, крім того, мало що дасть, бо і так треба ті іконки копіювати в корінь кожного хоста (хочу, щоб у всіх по дефолту було гарно!)
Є більш кардинальний, але правильніший шлях. В Debian файл /etc/apache2/httpd.conf порожній, і призначений для налаштунок адміністратора найвищого рівня. Те що треба. Вписав туди наступне:
#indexing options #Alias /icons/ /var/www/srv.if.ua/icons/ AliasMatch ^/icons(.*) /var/www/srv.if.ua/icons$1 IndexOptions FancyIndexing IconsAreLinks XHTML HTMLTable SuppressDescription IndexStyleSheet /service/index.css # SuppressHTMLPreamble #HeaderName /header.html AddIconByEncoding (CMP,/icons/page_white_zip.png) x-compress x-gzip AddIconByType (TXT,/icons/page_white_text.png) text/* AddIconByType (IMG,/icons/picture.png) image/* AddIconByType (SND,/icons/sound.png) audio/* AddIconByType (VID,/icons/film.png) video/* AddIcon /icons/application_double.png .exe AddIcon /icons/application_xp_terminal.png .bin AddIcon /icons/page_white_zip.png .Z .z .tgz .gz .zip AddIcon /icons/page_white_code.png .shtml AddIcon /icons/page_white_acrobat.png .pdf AddIcon /icons/page_white_zip.png .txt AddIcon /icons/page_white_c.png .c AddIcon /icons/page_white_cplusplus.png .cpp AddIcon /icons/page_white_dvd.png .dvi AddIcon /icons/page_white_gear.png .ini .conf .sh .shar .csh .ksh .tcl AddIcon /icons/page_white_actionscript.png .as AddIcon /icons/page_white_flash.png .fla .swf AddIcon /icons/page_white_freehand.png .fh3 .fh4 .fh5 .fh7 .ft7 .fh8 .ft8 .fh9 .ft9 .fh10 .ft10 .fhx AddIcon /icons/page_white_h.png .h AddIcon /icons/page_white_php.png .php .php3 .php4 .php5 AddIcon /icons/page_white_office.png .docx .docm .dotx .dotm AddIcon /icons/page_white_powerpoint.png .pptx .pptm .potx .potm .ppam .ppsx .ppsm AddIcon /icons/page_excel.png .xlsx .xlsm .xltx .xltm .xlsb .xlam AddIcon /icons/page_white_ruby.png .rb AddIcon /icons/page_white_word.png .doc AddIcon /icons/css.png .css AddIcon /icons/html.png .html .htm AddIcon /icons/xhtml.png .xhtml AddIcon /icons/script_code.png .js AddIcon /icons/database_table.png .sql AddIcon /icons/script_gear.png .inc .pl .py AddIcon /icons/help.png .chm AddIcon /icons/music.png .wav .mp3 .ogg AddIcon /icons/folder_delete.png .. AddIcon /icons/asterisk_yellow.png README AddIcon /icons/folder_add.png ^^DIRECTORY^^ AddIcon /icons/asterisk_orange.png ^^BLANKICON^^ DefaultIcon /icons/page_white.png |
Все досить простенько, по порядку:
AliasMatch ^/icons(.*) /var/www/srv.if.ua/icons$1 |
це аліас модулем mod_alias для тих, в кого немає nginx;
AddIconByEncoding, AddIconByType, AddIcon, DefaultIcon |
це директиви, які закріпляють значок за файлом згідно кодування, МІМЕ-типу, розширенню-масці і по дефолту відповідно. ^^DIRECTORY^^ – це каталог, ^^BLANKICON^^ – це значок в заголовку.
IndexOptions FancyIndexing IconsAreLinks XHTML HTMLTable SuppressDescription |
Тут перераховані опції: FancyIndexing – вивід іконок біля імен файлів; IconsAreLinks – іконки теж будуть клікабельні; XHTML – генерація XHTML замість HTML 3.2; HTMLTable – верстка таблицею замість блоку <pre></pre>; SuppressDescription – не виводити колонку “Description”. Детальніше для всіх директив, звісно, в описі mod_autoindex.
Хотілось би звернути увагу, що всі ці директиви загорнуті у <Directory /></Directory>, тобто для кореня кожного хоста. Інакше не працюють, ні у випадку без секцій, ні коли ставив <Ifmodule mod_autoindex></Ifmodule>. Може, це лише особливість вищого рівня настройки, не знаю.
Після цього вказані іконки цілим пакетом silk залив в корінь головного хоста. Silk icons – дуже хороший і безкоштовний набір іконок для веб-дизайну в форматі png. Там 1000 значків. Залив усі, з цікавою перспективою – це буде віртуальний каталог, і з будь-якого хоста сервера, пославшись на іконку з цього каталогу, її можна використовувати, не інсталячи повторно. Зручно для шаблонів типу HTTP помилок, і взагалі.
Тепер ситуація трошки кращає (Рис. 3.), але не дуже, бо для інших хостів іконки не є віртуально доступні. Ну і розсипалось все.
Гм, всьо має бути рівненько. Apache має деякі проблеми з підрахунком довжини імен файлів кирилицею, що помітно з скриншота. Саме це спонукало використати опцію HTMLTable.
І, про що я ще не згадав, це можливість підключити файл зі стилями. Робиться просто
IndexStyleSheet /service/index.css |
в самому файлі міститься джентльменський набір налаштунків, але їх в принципі вистачило. В каталог service поскладав всі обробники помилок, дефолтних сторінок, індексу от, і стилі до них.
body{ padding:10px; font-size:14px; font-family:sans-serif; } h1{ font-size:1.2em; } img{ border:none; } table { } th, td{ margin:0; padding:4px; } a{ color:#002F3D; } a:hover{ text-decoration:none; } |
Гммм, тепер взагалі добре стало, видно із рис. 4. Звісно, були інші варіанти, наприклад, зробити свій footer і header, а шлях до каталогу підключати через SSI, але ІМХО, це не дуже потрібний екстремізм.
Нарешті, залишається зробити все вищеописане доступним для усіх хостів, які є на сервері. В файл server.conf nginx, який описаний тут (прочитати, в мене особлива конфігурація), слід дописати правила для двох каталогів.
location ~ /(icons|service)/ { root /var/www/srv.if.ua; access_log off; expires 30d; } |
Отож, отримали симпатичний інтерфейс навігації, і здобули знання про багатогранний конструктор apache з світу open-source. Та й хочеться мати фірмовий стиль, як в хостинг-провайдерів, це просто хороший тон, такі наробки завжди знадобляться.