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:
dirA
http://test.local/
dirA/dirB/
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).
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
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]