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> 1 4 Answers
There are two things here:
- symlinks
- 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, 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/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 Indexeswhy .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.
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 cranIn 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
The option must be used like this:
Options +FollowSymLinksUsually it's put in Apache configuration (httpd.conf or conf.d/ or sites-enabled/) inside a <Directory>.
See Options, AllowOverride and <Directory> in Apache documentation.
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.