Comment sont définies les variables d’environnement Apache2 (2.4) CGI CONTEXT_DOCUMENT_ROOT
et CONTEXT_PREFIX
?
De l’expérimentation, j’ai déterminé ce qui suit:
CONTEXT_DOCUMENT_ROOT
semble être le chemin d’access local complet à la demande d’origine lorsque DirectoryIndex
ou ErrorDocument
appelle un script CGI.
CONTEXT_PREFIX
semble être l’original REQUEST_URI
, sans aucune partie de requête, lorsque DirectoryIndex
ou ErrorDocument
ont appelé un script CGI. (Dans ces cas, REQUEST_URI
est défini sur l’URI du script CGI plutôt que sur l’original.)
Cependant, je n’arrive pas à trouver de documentation officielle d’Apache sur ces variables. Est-ce que quelqu’un ici a un lien vers une telle documentation, ou plus de connaissances faisant autorité à partager?
CONTEXT_PREFIX
et CONTEXT_DOCUMENT_ROOT
vous indiquent comment apache a utilisé une directive Alias
(ou une fonctionnalité similaire – comme mod_userdir
) pour traduire le chemin d’URL vers le chemin du système de fichiers. Le chemin du système de fichiers finira par pointer vers le fichier à servir ou un script cgi à exécuter.
Donc, si apache traduit l’URL:
http://host/_CONTEXT_PREFIX/path/file
au chemin du système de fichiers:
/_CONTEXT_DOCUMENT_ROOT/path/file
cela implique qu’il existe un Alias
(ou un ScriptAlias
ou un mécanisme similaire tel que mod_userdir
) comme suit:
Alias /_CONTEXT_PREFIX /_CONTEXT_DOCUMENT_ROOT
La directive Alias
enregistre / _CONTENT_PREFIX dans ${CONTEXT_PREFIX}
et / _CONTEXT_DOCUMENT_ROOT est enregistrée dans ${CONTEXT_DOCUMENT_ROOT}
.
Voici un exemple d’utilisation. Dans un contexte
, RewriteRule
traduit un nom de chemin d’access relatif au répertoire en un chemin d’URL absolu ou un nom de fichier absolu (qui doit exister). Donc, si vous voulez traduire les URL qui se sont terminées par .htm en .php, vous devez écrire comme ceci:
RewriteEngine On RewriteRule (.*)[.]html$ /_CONTEXT_DOCUMENT_ROOT/$1.php
Maintenant, vous pouvez l’écrire sans répéter /_CONTEXT_DOCUMENT_ROOT
, mais peut-être plus important que le fichier ne doit pas exister parce que nous le réécrivons dans un chemin d’URL:
RewriteEngine On RewriteRule (.*)[.].* ${CONTEXT_PREFIX}/$1.php