¿Cómo consigo que Apache siga los enlaces simbólicos?

98

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

mydir -> /home/user/mydir

(que creé con ln -s)

Ahora, si quiero ver una lista de los archivos mydirdesde la web, tengo que dar a Apache la directiva FollowSymLinks, ¿verdad?

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

Este es mi /etc/apache2/sites-enabled/000-defaultarchivo:

<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>
luca
fuente
También probé con un alias en el archivo de configuración .. todavía no funciona ..
Luca

Respuestas:

65

Aquí hay dos cosas:

  1. enlaces simbólicos
  2. lista de directorios

enlaces simbólicos

Suponiendo que /var/wwwes su DocumentRoot para su host virtual predeterminado, debe encontrar su archivo de configuración de host virtual predeterminado (probablemente /etc/apache2/sites-enabled/000-default) y ponerlo dentro de ese bloque de host virtual, por ejemplo

<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 allí.

lista de directorios

Para que Apache enumere los archivos en un directorio, también debe habilitar la Indexesopción, por ejemplo, cambiar

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

en /etc/apache2/sites-enabled/000-defaulta:

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

O tal vez una forma más segura es cambiarlo a:

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

y poner esto en /home/user/mydir/.htaccess.

    Option Indexes

por qué .htaccess no funciona

Por defecto, poner Options <something>en un .htaccessarchivo no funcionará debido a la otra entrada en su fichero de configuración: AllowOverride None.

Por eso tenemos que poner AllowOverride Indexesahí.

( Documentación de AllowOverride )

Mikel
fuente
mira mi archivo de configuración anterior ... no funciona sin embargo ...
Luca
¿Puede ser un problema de permisos? Soy usuario root, sé que no es bueno usar un sistema como root, de todos modos ... Soy root y el directorio al que estoy enlazado está en la raíz de inicio / root / mydir ..
luca
1
Si. ¿Qué mensaje de error ves? Tendrá que hacer sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydirpara que funcione, y eso probablemente no sea una buena idea. Es mejor mover los archivos a algún lugar debajo /var/wwwsi puedes.
Mikel
Siempre que reciba un error y solicite ayuda, debe proporcionarnos el mensaje de error exacto. Y habrá pistas en /var/log/apache2/error.log.
Mikel
77
Asegúrese de no apuntar a su directorio de inicio cuando lo tenga encriptado, es decir, un enlace simbólico en /var/www/home/user/directory. Producirá un gran dolor de cabeza.
11

La opción debe usarse así:

Options +FollowSymLinks

Por lo general, se trata de poner en la configuración de Apache ( httpd.confo conf.d/o sites-enabled/) dentro de una <Directory>.

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

Gravedad
fuente
1
En el caso de FollowSymLinks específicamente, DEBE estar dentro de una estructura de directorio cuando está dentro de un archivo .conf. Del manual actual de Apache "Las opciones FollowSymLinks y SymLinksIfOwnerMatch funcionan solo en secciones <Directory> o archivos .htaccess".
ClearCrescendo
1
Advertencia: Mezclar opciones con un + o - con los que no tienen una sintaxis válida y es probable que cause resultados inesperados.
kurdtpage
10

Con la configuración original (nueva) en Ubuntu 14.04 con apache 2.4.7, no es necesario cambiar nada en * .conf para seguir los enlaces simbólicos creados en / var / www / html.

Pero es necesario que el usuario www-data tenga acceso a TODAS las rutas del destino del enlace simbólico (incluso para los hosts virtuales, no solo para los enlaces sim). 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 derechos en todo el directorio. Necesita x derechos en cada uno de / ruta, / ruta / a, y / ruta / a / espejo. También necesita permiso de lectura en el directorio de destino y, dependiendo del objetivo del directorio, tal vez el usuario www-data también necesite permisos de escritura.

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

victe
fuente
1

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

originalbryan
fuente