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

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 )


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.


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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.