2011-02-10 21:52:57 +0000 2011-02-10 21:52:57 +0000
101
101

¿Cómo consigo que Apache siga los symlinks?

En mi carpeta www de apache (/var/www en ubuntu 10.10) tengo:

mydir -> /home/user/mydir

(que he creado con ln -s)

Ahora, si quiero ver un listado de los archivos de mydir de la web, tengo que darle a apache la directiva FollowSymLinks, ¿verdad?

¿Pero dónde la pongo? ¿En un archivo .htaccess? ¿Dónde? Lo intenté de muchas maneras pero no lo entiendo…

Este es mi archivo /etc/apache2/sites-enabled/000-default:

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

Respuestas (4)

67
67
67
2011-02-10 21:56:40 +0000

Hay dos cosas aquí:

  1. symlinks
  2. listado de directorios

symlinks

/var/www Asumiendo que /etc/apache2/sites-enabled/000-default es su DocumentRoot para su host virtual por defecto, debería encontrar su archivo de configuración de host virtual por defecto (probablemente Indexes) y ponerlo dentro de ese bloque de host virtual, e. g.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

Si no ha cambiado nada, esa opción ya debería estar ahí.

lista de directorios

Para hacer que Apache liste los archivos de un directorio, necesita habilitar la opción /etc/apache2/sites-enabled/000-default también, e. g. cambiar

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

en /home/user/mydir/.htaccess a:

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

O, quizás una forma más segura es cambiarlo a:

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

y poner esto en Options <something>.

Option Indexes

por qué . htaccess no funciona

Por defecto, poner .htaccess en un archivo AllowOverride None no funcionará debido a la otra entrada en su archivo de configuración: AllowOverride Indexes.

Por eso tenemos que poner &007 allí.

AllowOverride documentation )

12
12
12
2011-02-10 22:00:05 +0000

La opción debe usarse así:

Options +FollowSymLinks

Normalmente se pone en la configuración de Apache (httpd.conf o conf.d/ o sites-enabled/) dentro de un <Directory>.

Ver Options , AllowOverride y <Directory> en la documentación de Apache.

10
10
10
2014-10-02 19:14:39 +0000

Con la configuración original (fresca) en Ubuntu 14.04 con apache 2.4.7, no hay necesidad de cambiar nada en *.conf para seguir los symlinks creados bajo /var/www/html.

Pero es necesario que el usuario www-data tenga acceso a TODO el camino del symlink target (incluso para los virtuales no sólo para los simlinks). Por ejemplo,

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

En este ejemplo el usuario www-data (o todos los usuarios si lo desea, pero puede ser peligroso) necesita ejecutar los derechos hasta el directorio. Necesita x derechos en cada uno de los directorios /path, /path/to, y /path/to/mirror. También necesita permiso Read en el directorio de destino, y, dependiendo del objetivo del directorio, quizás el usuario www-data necesite permisos de escritura también.

La pista se obtuvo de https://stackoverflow.com/a/14623574

1
1
1
2014-09-10 15:31:58 +0000

No pude hacer que esto funcionara hasta que instalé el módulo apache de autoindexación. De las numerosas entradas del blog y del foro, nadie mencionó que fuera necesario. Espero que esto ayude a alguien.