Comment puis-je obliger Apache à suivre les liens symboliques?

98

Dans mon dossier www Apache ( /var/wwwsous Ubuntu 10.10), j'ai:

mydir -> /home/user/mydir

(que j'ai créé avec ln -s)

Maintenant, si je veux voir une liste des fichiers sur mydirle Web, je dois donner la directive à Apache FollowSymLinks, non?

Mais où est-ce que je le mets? Dans un .htaccessfichier? Où? J'ai essayé beaucoup de façons mais je ne le comprends pas ...

Ceci est mon /etc/apache2/sites-enabled/000-defaultdossier:

<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
la source
J'ai aussi essayé avec un alias dans le fichier de configuration .. ne fonctionne toujours pas ..
luca

Réponses:

65

Il y a deux choses ici:

  1. liens symboliques
  2. liste du répertoire

liens symboliques

En supposant que /var/wwwvotre racine de document soit votre hôte virtuel par défaut, vous devriez trouver (probablement /etc/apache2/sites-enabled/000-default) votre fichier de configuration d’hôte virtuel par défaut et le placer dans ce bloc d’hôte virtuel, par exemple:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

Si vous n'avez rien changé, cette option devrait déjà être là.

liste du répertoire

Pour que Apache répertorie les fichiers dans un répertoire, vous devez également activer cette Indexesoption, par exemple modifier

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

dans /etc/apache2/sites-enabled/000-defaultà:

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

Ou, peut-être un moyen plus sûr est de le changer en:

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

et mettre cela dans /home/user/mydir/.htaccess.

    Option Indexes

pourquoi .htaccess ne fonctionne pas

Par défaut, mettre Options <something>dans un .htaccessfichier ne fonctionnera pas à cause de l'autre entrée dans votre fichier de configuration: AllowOverride None.

C'est pourquoi nous devons AllowOverride Indexesy mettre .

( Documentation AllowOverride )

Mikel
la source
regarde mon fichier de configuration ci-dessus ... ça ne marche pas encore ...
luca
peut-il s'agir d'un problème d'autorisations? Je suis utilisateur root, je sais que ce n'est pas une bonne chose d'utiliser un système en tant que root, de toute façon .. je suis root et le répertoire vers lequel je me trouve (lien symbolique) se trouve dans la racine home / root / mydir ..
luca
1
Oui. Quel message d'erreur voyez-vous? Vous devrez le faire sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydirpour que cela fonctionne et ce n'est probablement pas une bonne idée. Mieux vaut déplacer les fichiers quelque part sous /var/wwwsi vous le pouvez.
Mikel
Chaque fois que vous obtenez une erreur et demandez de l'aide, vous devez nous fournir le message d'erreur exact. Et il y aura des indices dans /var/log/apache2/error.log.
Mikel
7
Assurez-vous que vous ne pointez pas sur votre répertoire personnel lorsque vous l'avez crypté, c.-à-d. Un lien symbolique dans /var/www/home/user/directory. Cela produira un énorme mal de tête.
11

L'option doit être utilisée comme ceci:

Options +FollowSymLinks

Habituellement, il est placé dans la configuration Apache ( httpd.confou conf.d/ou sites-enabled/) dans un <Directory>.

Voir Options, AllowOverrideet <Directory>dans la documentation Apache.

Grawity
la source
1
Dans le cas de FollowSymLinks en particulier, il DOIT se trouver dans une structure Directory dans un fichier .conf. Extrait du manuel actuel d'Apache "Les options FollowSymLinks et SymLinksIfOwnerMatch ne fonctionnent que dans les sections <Directory> ou les fichiers .htaccess."
ClearCrescendo
1
Avertissement: Mélanger les options avec un + ou - avec ceux sans est une syntaxe non valide et susceptible de générer des résultats inattendus.
kurdtpage
10

Avec la configuration originale (récente) sur Ubuntu 14.04 avec apache 2.4.7, il n’est pas nécessaire de modifier quoi que ce soit dans * .conf pour suivre les liens symboliques créés sous / var / www / html.

Mais il est nécessaire que l'utilisateur www-data ait accès à TOUT le chemin de la cible du lien symbolique (même pour les hôtes virtuels et pas seulement pour les liens simulaires). Par exemple,

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

Dans cet exemple, l'utilisateur www-data (ou tous les utilisateurs si vous le souhaitez, mais peut être dangereux) doit exécuter les droits jusqu'au répertoire. Besoin de x droits dans chacun des chemins / path, / path / to et / path / to / mirror. Nécessite également une autorisation de lecture sur le répertoire cible et, en fonction de l'objectif du répertoire, l'utilisateur www-data doit également disposer d'autorisations d'écriture.

La clé a été obtenue à l' adresse https://stackoverflow.com/a/14623574

Victe
la source
1

Je ne pouvais pas que cela fonctionne avant d'installer le module autoindex apache. Parmi de nombreux articles de blog et de forum, personne n’a indiqué que cela était nécessaire. J'espère que ça aide quelqu'un.

originalbryan
la source