De la documentation j’ai ceci:
AliasMatch "^/projects/(.+)" "/var/www/domain.name/$1/public"
Il ne doit correspondre qu’à des URL telles que ../projects/project1
, pas ../projects/
par lui-même.
Quand je vais dire, http://example.org/projects/project1/
il retourne un 403 Forbidden
. Les journaux disent à cause de:
No matching DirectoryIndex found, and server-generated directory index forbidden by Options directive
.
J’ai essayé d’append un DirectoryIndex
explicitement dans les hôtes mais en vain. J’ai ouvert le répertoire ( /var/www/domain.name/project1/public
) pour qu’il soit lisible par tout le monde et maintenant, il affiche simplement une liste de répertoires du dossier que je veux. Je peux voir que cela va dans le bon dossier et peut voir le fichier index.html mais il ne vient pas automatiquement comme il le devrait.
Version résumée de mon fichier VirtualHost:
DocumentRoot /var/www/domain.name/www/public ServerName www.domain.name AliasMatch "^/projects/(.+)" "/var/www/domain.name/$1/public" ErrorDocument 401 err.php ErrorDocument 404 err.php ErrorDocument 500 err.php Options Indexes FollowSymLinks AllowOverride All
Si je puis définir les permissions sur le dossier de projet spécifique à 755, je viens d’obtenir une liste de répertoire. Je suis revenu à 711.
Tous les dossiers dans / var / www / sont la propriété de nom d’utilisateur: www-data et disposent des permissions 711.
Si je fais un Alias direct dans le dossier, c’est-à-dire Alias /projects/ /var/www/domain.name//public
cela fonctionne.
AliasMatch "^/projects/(.+)" "/var/www/domain.name/$1/public"
Le problème est que toutes les demandes sont mappées à une seule URL – un répertoire. AliasMatch
ne copie pas le chemin de fuite à la fin de la cible, contrairement à un Alias
.
Lorsque vous demandez /projects/project1
, l’alias vous met naturellement en /projects/project1
avec /projects/public
. mod_dir ( DirectorySlash
) ajoute une barre oblique (car il s’agit d’un répertoire valide), mais l’index de répertoire est perdu. Le fichier cible est littéralement juste /projects/public/
(un répertoire), comme indiqué dans la directive AliasMatch
, et non /projects/public/index.html
comme cela semble être requirejs.
Pour que cela fonctionne comme prévu (pour pouvoir accéder à tous les fichiers du répertoire “public”, par exemple index.php
), vous avez besoin d’un deuxième sous-modèle entre parenthèses, par exemple:
AliasMatch ^/projects/([^/]+)(.*) /var/www/domain.name/$1/public/$2