Apache, FancyIndexing and PHP 5 (mod_autoindex)

Introduction
The default Directory Listing in Apache is pretty much awful, but I had a need to present some files through a web browser. Rather than produce something with PHP alone I decided to enhance the Apache FancyIndexing option as it is designed for exactly this purpose.
I came across a nice PHP enhancement (update to include link and credit) to the FancyIndexing that added guided navigation to the directory listing, as well as improve the default font and general styling thanks to effective use of CSS.

Instructions

1. Edit httpd.conf and add or modify the following

AccessFileName .htaccess
<Files ~ “^\.ht”>
Order allow,deny
Deny from all
</Files>

<Directory /your/directory>
AllowOverride all
</Directory>

2. In the directory you want the listing of add the following .htaccess file

Options +Indexes +FollowSymlinks
IndexOptions FancyIndexing HTMLTable FoldersFirst SuppressRules SuppressDescription SuppressHTMLPreamble Charset=UTF-8
#
# AddIcon* directives tell the server which icon to show for different# files or filename extensions.  These are only displayed for
# FancyIndexed directories.
#
AddIcon /autoindex/icons/application.png .exe .app
AddIcon /autoindex/icons/type_binary.png .bin .hqx .uu
AddIcon /autoindex/icons/type_box.png .tar .tgz .tbz .tbz2 bundle .rar
AddIcon /autoindex/icons/type_code.png .html .htm .htx .htmls .dhtml .phtml .shtml .inc .ssi .c .cc .css .h .rb .js .rb .pl .py .sh .shar .csh .ksh .tcl .as
AddIcon /autoindex/icons/type_database.png .db .sqlite .dat
AddIcon /autoindex/icons/type_disc.png .iso .image
AddIcon /autoindex/icons/type_document.png .ttf
AddIcon /autoindex/icons/type_excel.png .xlsx .xls .xlm .xlt .xla .xlb .xld .xlk .xll .xlv .xlw
AddIcon /autoindex/icons/type_flash.png .flv
AddIcon /autoindex/icons/type_illustrator.png .ai .eps .epsf .epsi
AddIcon /autoindex/icons/type_pdf.png .pdf
AddIcon /autoindex/icons/type_php.png .php .phps .php5 .php3 .php4 .phtm
AddIcon /autoindex/icons/type_photoshop.png .psd
AddIcon /autoindex/icons/monitor.png .ps
AddIcon /autoindex/icons/type_powerpoint.png .ppt .pptx .ppz .pot .pwz .ppa .pps .pow
AddIcon /autoindex/icons/type_swf.png .swf
AddIcon /autoindex/icons/type_text.png .tex .dvi
AddIcon /autoindex/icons/type_vcf.png .vcf .vcard
AddIcon /autoindex/icons/type_word.png .doc .docx
AddIcon /autoindex/icons/type_zip.png .Z .z .tgz .gz .zip
AddIcon /autoindex/icons/globe.png .wrl .wrl.gz .vrm .vrml .iv
AddIcon /autoindex/icons/vector.png .plot

AddIconByType (TXT,/autoindex/icons/type_text.png) text/*
AddIconByType (IMG,/autoindex/icons/type_image.png) image/*
AddIconByType (SND,/autoindex/icons/type_audio.png) audio/*
AddIconByType (VID,/autoindex/icons/type_video.png) video/*
AddIconByEncoding (CMP,/autoindex/icons/type_box.png) x-compress x-gzip
AddIcon /autoindex/icons/back.png ..
AddIcon /autoindex/icons/information.png README INSTALL
AddIcon /autoindex/icons/type_folder.png ^^DIRECTORY^^
AddIcon /autoindex/icons/blank.png ^^BLANKICON^^

#
# DefaultIcon is which icon to show for files which do not have an icon# explicitly set.
#
DefaultIcon /autoindex/icons/type_document.png
#
# Enables PHP to be used in our header file
# 
AddHandler application/x-httpd-php .php
AddType text/html .php .html
#
# ReadmeName is the name of the README file the server will look for by
# default, and append to directory listings.
#
# HeaderName is the name of a file which should be prepended to
# directory indexes.
ReadmeName /autoindex/footer.php
HeaderName /autoindex/header.php
#
# IndexIgnore is a set of filenames which directory indexing should ignore
# and not include in the listing.  Shell-style wildcarding is permitted.
#
IndexIgnore autoindex .??* *~ *# RCS CVS *,v *,t *.dat ..

IndexOptions +NameWidth=42
AddDescription "PNG images" *.png

Warning for PHP 5.3 and higher

I originally had this running with PHP 5.1 and it was working great.  I upgraded to PHP 5.3.3 (latest at the time of writing) and it refused to parse the PHP, despite the PHP working if I called the Header and Footer PHP pages directly.

It turned out to be the directive XHTML in the IndexOptions line.  Remove this and it will parse.  XHTML says:

The XHTML keyword forces mod_autoindex to emit XHTML 1.0 code instead of HTML 3.2.

Whereas the same pages says that a Header/Readme filename “must resolve to a document with a major content type of text/* (e.g.text/htmltext/plain, etc.).”

11 comments on “Apache, FancyIndexing and PHP 5 (mod_autoindex)

  1. a simple pair of puma Ferrari place to be the perfect diamond necklace for your requirements.
    http://esrefatabey.com.tr/toms-shoes.html

  2. After looking over a few of the blog articles on your website,
    I really appreciate your way of blogging.
    I bookmarked it to my bookmark webpage list and will be checking back in the near future.
    Please visit my web site too and tell me what you think.

  3. I drop a comment whenever I especially enjoy a post on
    a website or if I have something to valuable to contribute to the conversation.

    Usually it is triggered by the fire displayed in the
    post I read. And on this article Apache, FancyIndexing
    and PHP 5 (mod_autoindex) | System Administration and
    Architecture Blog. I was actually excited enough to drop a thought 🙂 I actually do have 2 questions for you if it’s allright. Is it only me or do some of the remarks appear as if they are written by brain dead individuals? 😛 And, if you are posting on other online sites, I’d
    like to follow everything fresh you have to post.
    Would you make a list all of all your shared sites like your linkedin profile, Facebook page or twitter feed?

  4. True, there are comedians that cuss a lot, but you got to earn that right before you do that.
    It is an industry norm that you offer a hotel room for the comedian at the same time.
    Wouldn’t it be nice if we could take a magic pill and have a perfect
    relationship.

  5. I loved as much as you will receive carried outt right here.
    The sketch is tasteful, your authored subject matter stylish.nonetheless,
    yoou command get got an nervousnesss over that you
    wish be delivering the following. unwell unquestionably come further formerly again since exactly the same nearly
    a lot often inside case you shield tthis increase.

Leave a comment