Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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?

But where do I 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>
share|improve this question
    
I also tried with an Alias in the config file.. still doesn't work.. –  luca Feb 10 '11 at 22:14

4 Answers 4

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/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, that option should already be there.

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/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)

share|improve this answer
    
look at my config file above... it doesn't work yet... –  luca Feb 10 '11 at 22:12
    
can it be a problem of permissions? I'm root user, I know it's not a good thing to use a system as root, anyway.. I'm root and the directory I symlink to is in the root home /root/mydir.. –  luca Feb 10 '11 at 22:13
    
Yes. What error message do you see? You will need to do sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydir to make it work, and that's probably not a good idea. Better to move the files somewhere under /var/www if you can. –  Mikel Feb 10 '11 at 23:17
    
Whenever you get an error and are asking for help, you should provide the exact error message to us. And there will be clues in /var/log/apache2/error.log. –  Mikel Feb 10 '11 at 23:19
3  
Make sure you are not pointing to your home directory when you have it encrypted, i.e. a symbolic link in /var/www/home/user/directory. It will produce a huge headache. –  user97686 Sep 13 '11 at 14:50

The option must be used like this:

Options +FollowSymLinks

Usually it's put in Apache configuration (httpd.conf or conf.d/ or sites-enabled/), either global, inside a <VirtualHost> or inside a <Directory>, whichever is more apropriate.

See Options, AllowOverride and <Directory> in Apache documentation.

share|improve this answer
    
In the case of FollowSymLinks specifically it MUST be inside a Directory structure when within a .conf file. From the Apache current manual "The FollowSymLinks and SymLinksIfOwnerMatch Options work only in <Directory> sections or .htaccess files." –  ClearCrescendo Jun 14 at 19:07

With the original (fresh) configuration on Ubuntu 14.04 with apache 2.4.7, there is no need to change anything in *.conf to follow symlinks created under /var/www/html.

But it is necessary that user www-data has access to ALL the path of symlink target (even for virtualhosts not only for simlinks). For instance,

cd /var/www/html
ln -s /path/to/mirror/cran-mirror cran

In this example user www-data (or all users if you want, but can be dangerous) needs execute rights all the way to the directory. Need x rights in each of /path, /path/to, and /path/to/mirror. Also needs Read permission on the target directory, and, depending of the goal of the directory, maybe user www-data needs write permissions too.

Clue was obtained from http://stackoverflow.com/a/14623574

share|improve this answer

I couldn't get this working until installing the autoindex apache module. Out of numerous blog posts and forum posts, no one mentioned it being necessary. Hope this helps someone.

share|improve this answer

protected by Community Oct 2 at 20:43

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.