apache2的含义CONTEXT_DOCUMENT_ROOT和CONTEXT_PREFIX?

时间:2014-09-09 19:01:49

标签: apache cgi

如何定义Apache2(2.4)CGI环境变量CONTEXT_DOCUMENT_ROOTCONTEXT_PREFIX

从实验中,我确定了以下内容:

    CONTEXT_DOCUMENT_ROOTDirectoryIndex调用CGI脚本时,
  • ErrorDocument 似乎是原始请求的完整本地路径。

  • CONTEXT_PREFIXREQUEST_URI调用CGI时,
  • DirectoryIndex 似乎是原始ErrorDocument,没有任何查询部分脚本。 (在这些情况下,REQUEST_URI设置为CGI脚本的URI,而不是原始的。)

但是,我似乎无法在这些变量上找到Apache的任何官方文档。这里有没有人有这样的文档链接,或者更多权威知识要分享?

1 个答案:

答案 0 :(得分:3)

CONTEXT_PREFIXCONTEXT_DOCUMENT_ROOT告诉您apache如何使用Alias指令(或类似功能 - 如mod_userdir)将URL路径转换为文件系统路径。文件系统路径最终将指向要提供的文件或要运行的cgi脚本。

因此,如果apache翻译了URL:

    http://host/_CONTEXT_PREFIX/path/file

到文件系统路径:

    /_CONTEXT_DOCUMENT_ROOT/path/file

它表示存在Alias(或ScriptAlias或类似机制,例如mod_userdir),如下所示:

    Alias /_CONTEXT_PREFIX /_CONTEXT_DOCUMENT_ROOT

Alias指令在${CONTEXT_PREFIX}中保存 / _ CONTENT_PREFIX / _ CONTEXT_DOCUMENT_ROOT 保存在${CONTEXT_DOCUMENT_ROOT}

以下是使用它的一个示例。在<Directory>上下文RewriteRule中,将相对于目录的路径名转换为绝对URL路径,或绝对文件名(必须存在)。因此,如果您想将以.htm结尾的网址翻译为.php,您必须这样写:

    <Directory "/_CONTEXT_DOCMENT_ROOT">
        <FilesMatch "*.htm">
            RewriteEngine On
            RewriteRule (.*)[.]html$ /_CONTEXT_DOCUMENT_ROOT/$1.php
        </FilesMatch>
    </Directory>

现在您可以在不重复/_CONTEXT_DOCUMENT_ROOT的情况下编写它,但更重要的是,文件不必存在,因为我们将其重写为URL路径:

    <Directory "/_CONTEXT_DOCMENT_ROOT">
        <FilesMatch *.htm>
            RewriteEngine On
            RewriteRule (.*)[.].* ${CONTEXT_PREFIX}/$1.php
        </FilesMatch>
    </Directory>