web-dev-qa-db-fra.com

Comment le fichier index.html peut-il être servi à partir d'un sous-répertoire de DocumentRoot sans utiliser de liens de niveau système?

Comment le fichier index.html peut-il être servi à partir d'un sous-répertoire du fichier DocumentRoot sans utiliser de liens de niveau système?

Par exemple:

  • Soit la racine du document d'un hôte virtuel Apache 2.4 dirA
  • Laisser l'URL de base (VirtualHost) être http://test.local/
  • Laisser index.html résider dans dirA/dirB/
  • Laissez http://test.local/ (l'URL de base) résoudre le fichier index.html (sans donner la liste des répertoires).

J'ai essayé d'utiliser mod rewrite pour le faire, mais je ne connais pas bien regex et mod rewrite. La règle que j'ai qui fonctionne est RewriteRule . /html/index.html [L], mais cela est inacceptable, car toute adresse URL sera résolue en test.local/html/(où le fichier index.html).

Ce qui est nécessaire, c’est que l’URL exacte corresponde à la racine du document. Recherchez le fichier index.html dans un sous-répertoire de la racine du document (à savoir "html") au lieu de la racine du document --without using system lien symbolique de niveau (c'est-à-dire: entièrement à partir d'Apache).

2
Jacob Fines

Vous voudrez peut-être la solution mod_rewrite proposée par @Stephen, mais tenez également compte de DirectoryIndex (en fonction de vos besoins).

Le document DirectoryIndex indique à Apache le fichier à servir lorsque vous demandez un répertoire. La valeur par défaut est souvent index.html dans le répertoire demandé, mais vous pouvez spécifier n’importe quel fichier, n’importe où. Par exemple:

DirectoryIndex /html/index.html

Ceci indique à Apache de servir le fichier /html/index.html relatif à la racine lorsqu’il demande un répertoire (par exemple, la racine du document, comme dans votre cas). Si vous voulez servir index.html dans le répertoire demandé lorsqu'il existe, mais /html/index.html sinon, vous pouvez inclure les deux, dans l'ordre dans lequel ils doivent être testés, par exemple:

DirectoryIndex index.html /html/index.html

Référence:
https://httpd.Apache.org/docs/2.4/mod/mod_dir.html#directoryindex

2
MrWhite

Votre règle de réécriture est proche. Vous avez juste besoin de limiter un peu plus.

RewriteRule ^\/?$ /html/index.html [L]

Le \/ correspond à une barre oblique, qui correspond à l'URL souhaitée pour la page d'accueil. Il est échappé avec la barre oblique inverse.

Le point d'interrogation rend la barre oblique facultative afin que la règle puisse être utilisée dans un fichier .htaccess ou à l'intérieur d'un fichier Apache . Conf.

Le ^ correspond au début du chemin de l'URL et le $ correspond à la fin du chemin de l'URL. Les mettre sur limitera la règle à la page d’accueil.

Si vous souhaitez réécrire tous les fichiers .html dans ce sous-répertoire, vous pouvez également ajouter la règle:

RewriteCond %{REQUEST_URI} !^/html/
RewriteRule ^\/?(.*\.html)$ /html/$1 [L]
1
Stephen Ostermiller