DirectoryIndex introuvable sur AliasMatch

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