Come posso fare in modo che Apache segua i symlink?


98

Nella mia cartella www di apache ( /var/wwwsu Ubuntu 10.10) ho:

mydir -> /home/user/mydir

(che ho creato con ln -s)

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

Ma dove lo metto? In un .htaccessfile? Dove? Ho provato molti modi ma non lo capisco ...

Questo è il mio /etc/apache2/sites-enabled/000-defaultfile:

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

Ho anche provato con un alias nel file di configurazione .. continua a non funzionare ..
Luca

Risposte:


65

Ci sono due cose qui:

  1. link simbolici
  2. elenco di directory

link simbolici

Supponendo che /var/wwwsia DocumentRoot per l'host virtuale predefinito, dovresti trovare il file di configurazione dell'host virtuale predefinito (probabilmente /etc/apache2/sites-enabled/000-default) e inserirlo nel blocco host virtuale, ad es.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

Se non hai cambiato nulla, quell'opzione dovrebbe già essere lì.

elenco di directory

Per fare in modo che Apache elenchi i file in una directory, è necessario abilitare anche l' Indexesopzione, ad es. Modifica

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

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

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

O forse un modo più sicuro è cambiarlo in:

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

e inseriscilo /home/user/mydir/.htaccess.

    Option Indexes

perché .htaccess non funziona

Per impostazione predefinita, mettendo Options <something>in un .htaccessfile non funziona a causa della altra voce nel file di configurazione: AllowOverride None.

Ecco perché dobbiamo metterlo AllowOverride Indexeslì.

( Documentazione AllowOverride )


guarda il mio file di configurazione qui sopra ... non funziona ancora ...
luca,

può essere un problema di autorizzazioni? Sono utente root, so che non è una buona cosa usare un sistema come root, comunque .. Sono root e la directory a cui mi collego è nella root home / root / mydir ..
luca,

1
Sì. Quale messaggio di errore vedi? Dovrai farlo sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydirper farlo funzionare, e probabilmente non è una buona idea. Meglio spostare i file da qualche parte sotto /var/wwwse puoi.
Mikel,

Ogni volta che ricevi un errore e chiedi aiuto, dovresti fornirci il messaggio di errore esatto. E ci saranno indizi in /var/log/apache2/error.log.
Mikel,

7
Assicurati di non indicare la tua home directory quando è crittografata, ovvero un collegamento simbolico in /var/www/home/user/directory. Produrrà un forte mal di testa.

11

L'opzione deve essere utilizzata in questo modo:

Options +FollowSymLinks

Di solito viene inserito nella configurazione di Apache ( httpd.confo conf.d/o sites-enabled/) all'interno di a <Directory>.

Vedi Options, AllowOverridee <Directory>nella documentazione di Apache.


1
Nel caso specifico di FollowSymLinks DEVE trovarsi all'interno di una struttura di Directory quando si trova all'interno di un file .conf. Dal manuale attuale di Apache "Le opzioni FollowSymLinks e SymLinksIfOwnerMatch funzionano solo nelle sezioni <Directory> o nei file .htaccess."
ClearCrescendo,

1
Avvertenza: mescolare le opzioni con un + o - con quelle senza non è una sintassi valida ed è probabile che causi risultati imprevisti.
kurdtpage il

10

Con la configurazione originale (nuova) su Ubuntu 14.04 con apache 2.4.7, non è necessario modificare nulla in * .conf per seguire i collegamenti simbolici creati in / var / www / html.

Ma è necessario che l'utente www-data abbia accesso a TUTTO il percorso del target symlink (anche per host virtuali non solo per simlink). Per 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 lo si desidera, ma può essere pericoloso) devono eseguire i diritti fino alla directory. Hai bisogno di diritti x in ciascuno di / path, / path / to e / path / to / mirror. Inoltre ha bisogno dell'autorizzazione di lettura sulla directory di destinazione e, a seconda dell'obiettivo della directory, forse anche l'utente www-data necessita delle autorizzazioni di scrittura.

L'indizio è stato ottenuto da https://stackoverflow.com/a/14623574


1

Non sono riuscito a farlo funzionare fino all'installazione del modulo apache autoindex. Di numerosi post di blog e post di forum, nessuno ha menzionato la necessità. Spero che questo aiuti qualcuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.