Apache mod_alias设置路径别名

2017-03-23 01:01:02 4887

Apache mod_alias设置路径别名

在许多情况下,Apache主机提供的所有资源都位于该主机的DocumentRoot中。 DocumentRoot是在配置块中指定的目录。 此目录用于表示用户在文件系统上通过HTTP访问的各种文件,目录和资源。 但是,管理员通常要对文件系统上不位于DocumentRoot中的资源提供HTTP访问。 虽然Apache在某些情况下将遵循符号链接,但这可能很难维护。 因此,Apache可以指定一个Alias以让请求中的路径使用另一个路径

创建Alias



通常,虚拟主机配置指定一个DocumentRoot,按照惯例会指定public_html/或public/命名的目录。 如果example.com虚拟主机的文档根目录是/srv/www/example.com/public_html/,则对http://www.landui.com/index.htm的请求将返回位于/srv/www/example.com/public_html/index.htm。
如果管理员需要在code/资源请求访问/srv/git/public/下的文件,即可以在http://www.landui.com/code/访问它,则需要设置别名。 如下示例:

DocumentRoot /srv/www/example.com/public_html/
Alias /code /srv/git/public
<Directory /srv/git/public>
    Order allow,deny
    Allow from all
</Directory>



如果没有Alias指令,对http://www.landui.com/code/的请求将返回/srv/www/example.com/public_html/code/文件夹中的可用资源。 但是,别名将指示Apache提供来自/srv/git/public目录的内容。 配置块允许远程用户访问此目录。

使用Alias指令时需要考虑几个重要因素:

Directory配置块需要在Alias指令之后创建。 这使得可以允许访问和以其他方式配置那些目录。 在上面的示例中是/srv/git/public。

通常,在Alias指令中避免使用尾部斜杠。 如果请求http://www.landui.com/code应用的是Alias /code/ /srv/git/public/指令,请求URL没有尾部斜杠,即没有匹配Alias,资源将从DocumentRoot提供。

Alias指令需要在根级服务器配置(例如httpd.conf)或配置块中创建。

除了Alias之外,Apache还提供了一个AliasMatch指令,它提供类似的功能。 AlaisMatch提供了将给定资源的一类请求别名到DocumentRoot之外的位置的额外功能。 让我们考虑另一个虚构的example.com虚拟主机配置:

DocumentRoot /srv/www/example.com/public_html/
AliasMatch /code/projects/(.+) /srv/git/projects/$1
<DirectoryMatch "^/srv/git/projects/.+$">
    Order allow,deny
    Allow from all
</Directory>

在此示例中,对http://www.landui.com/code/projects/my_app和http://www.landui.com/code/projects/my_app2等网址的请求将分别由/srv/git/projects/my_app和/srv/git/projects/my_app2提供资源。 然而,http://www.landui.com/code/projects将从/srv/www/example.com/public_html/code/projects/而不是/srv/git/projects/提供,因为在?名中的/code/projects/(.+有尾部斜杠。

虽然Alias的用例有点少,但是该功能对于维护安全且易于维护的Web服务器非常有效。




































提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: