In my apache www folder ( /var/www on ubuntu 10.10) I have.

mydir -> /home/user/mydir

(that I created with ln -s )

Now, if I want to see a listing of the files in mydir from the web, I have to give apache the directive FollowSymLinks , right?

Where to put it? In a .htaccess file? Where? I tried many ways but I don't understand it...

This is my /etc/apache2/sites-enabled/000-default file.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks Indexes
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    Alias /downloads/ "/root/mydir/"
    <Directory "/root/mydir">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>
Best Answer


There are two things here

  1. symlinks
  2. directory listing

symlinks

Assuming /var/www is your DocumentRoot for your default virtual host, you should find your default virtual host configuration file (probably /etc/apache2/sites-enabled/000-default ) and put it inside that virtual host block, e.g.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

If you haven't changed anything this option should be available to you already

directory listing

To make Apache list the files in a directory, you need to enable the Indexes option too, e.g. change

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

in /etc/apache2/sites-enabled/000-default to.

    <Directory />
        Options FollowSymLinks Indexes
        AllowOverride None
    </Directory>

Or perhaps a more secure way is to change it to

    <Directory />
        Options FollowSymLinks
        AllowOverride Indexes
    </Directory>

and put this in /home/user/mydir/.htaccess .

    Option Indexes

why .htaccess doesn't work

By default, putting Options <something> in an .htaccess file won't work because of the other entry in your config file: AllowOverride None .

That's why we have to put AllowOverride Indexes there.

( AllowOverride documentation )