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

Come faccio a far seguire ad Apache i link simbolici?

Nella mia cartella apache www (/var/www su ubuntu 10.10) ho:

mydir -> /home/user/mydir

(che ho creato con ln -s)

Ora, se voglio vedere un elenco dei file in mydir dal web, devo dare ad apache la direttiva FollowSymLinks, giusto?

Ma dove la metto? In un file .htaccess? Dove? Ho provato in molti modi ma non lo capisco…

Questo è il mio file /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>

Risposte (4)

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

Ci sono due cose qui:

  1. symlinks
  2. directory listing

symlinks

Assumendo che /var/www sia la vostra DocumentRoot per il vostro host virtuale predefinito, dovreste trovare il vostro file di configurazione dell'host virtuale predefinito (probabilmente /etc/apache2/sites-enabled/000-default) e metterlo all'interno di quel blocco di host virtuale, e. g.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

Se non avete cambiato nulla, questa opzione dovrebbe essere già presente.

directory listing

Per fare in modo che Apache elenchi i file in una directory, è necessario abilitare anche l'opzione Indexes, e. g. cambiare

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

in /etc/apache2/sites-enabled/000-default in:

Option Indexes
``` &001 


o, forse un modo più sicuro è cambiarla in: 


&001 


e metterla in `/home/user/mydir/.htaccess`. 


&001 &001 

**perché . htaccess non funziona** 


Per impostazione predefinita, mettere `Options <something>` in un file `.htaccess` non funziona a causa dell'altra voce nel file di configurazione: `AllowOverride None`. 


Ecco perché dobbiamo mettere `AllowOverride Indexes`. 


[ AllowOverride documentation ](http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride))
12
12
12
2011-02-10 22:00:05 +0000

L'opzione deve essere usata in questo modo:

Options +FollowSymLinks
``` &001 


Di solito è messa in configurazione Apache (`httpd.conf` o `conf.d/` o `sites-enabled/` o `<Directory>`) all'interno di un `Options`. 


Vedere [ `AllowOverride` ](http://httpd.apache.org/docs/2.2/mod/core.html#options), [ `<Directory>` ](http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride) e [ &007 ](http://httpd.apache.org/docs/2.2/mod/core.html#directory) nella documentazione Apache.
10
10
10
2014-10-02 19:14:39 +0000

Con la configurazione originale (fresca) su Ubuntu 14.04 con apache 2.4.7, non c'è bisogno di cambiare nulla in *.conf per seguire i symlink creati sotto /var/wwwww/html.

Ma è necessario che l'utente www-data abbia accesso a ALL il percorso di destinazione dei symlink (anche per i virtualhosts non solo per i simlink). Ad esempio,

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

In questo esempio l'utente www-data (o tutti gli utenti se si vuole, ma può essere pericoloso) ha bisogno di eseguire i diritti fino alla directory. Necessita di x diritti in ciascuno di /path, /path/to, e /path/to/mirror. Ha anche bisogno di Leggiate i permessi sulla directory di destinazione, e, a seconda dell'obiettivo della directory, forse l'utente www-data ha bisogno anche di permessi di scrittura.

Clue è stato ottenuto da https://stackoverflow.com/a/14623574

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

Non sono riuscito a farlo funzionare fino all'installazione del modulo apache autoindex. Tra i numerosi post del blog e del forum, nessuno ha menzionato che fosse necessario. Spero che questo aiuti qualcuno.