<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_alias

可用语言:  en  |  fr  |  ja  |  ko  |  tr 

描述提供在文档树中映射主机文件系统不同部分的功能,以及 URL 重定向功能。
状态基础
模块标识符alias_module
源文件mod_alias.c

摘要

此模块包含的指令允许在请求到达服务器时操作和控制 URL。 AliasScriptAlias 指令用于映射 URL 和文件系统路径。 这允许将不在 DocumentRoot 下的直接内容作为 Web 文档树的一部分提供。

ScriptAlias 指令还具有将目标目录标记为仅包含 CGI 脚本的效果。

Redirect 指令用于指示客户端使用不同的 URL 发出新的请求。 当资源已移动到新位置时,它们通常会使用。

AliasScriptAliasRedirect 指令在 <Location><LocationMatch> 部分中使用时,可以使用 表达式语法 来操作目标路径或 URL。

Support Apache!

mod_alias 旨在处理简单的 URL 操作任务。 对于更复杂的任务(例如操作查询字符串),请使用 mod_rewrite 提供的工具。

处理顺序

ScriptAliasMatch

报告错误

top

评论

处理顺序

在不同上下文中出现的别名和重定向根据标准 合并规则 像其他指令一样进行处理。 但是,当多个别名或重定向出现在同一个上下文中(例如,在同一个 <VirtualHost> 部分中)时,它们会按特定顺序进行处理。

首先,所有重定向都在别名处理之前进行处理,因此匹配 RedirectRedirectMatch 的请求永远不会应用别名。 其次,别名和重定向按它们在配置文件中的出现顺序进行处理,第一个匹配项优先。

Alias "/foo/bar" "/baz"
Alias "/foo" "/gaq"

因此,当两个或多个这些指令应用于同一个子路径时,您必须首先列出最具体的路径,以便所有指令都能生效。 例如,以下配置将按预期工作

但是,如果以上两个指令的顺序颠倒,则 /foo Alias 将始终在 /foo/bar Alias 之前匹配,因此后面的指令将被忽略。

top

AliasScriptAliasRedirect 指令在 <Location><LocationMatch> 部分中使用时,这些指令将优先于任何全局定义的 AliasScriptAliasRedirect 指令。

描述Alias 指令
将 URL 映射到文件系统位置语法
Alias [URL-path] file-path|directory-path上下文
状态基础
服务器配置、虚拟主机、目录模块

mod_alias

Alias "/image" "/ftp/pub/image"

Alias 指令允许将文档存储在本地文件系统中,而不是在 DocumentRoot 下。 以 URL-path 开头的(%-解码)路径的 URL 将映射到以 directory-path 开头的本地文件。 URL-path 区分大小写,即使在不区分大小写的文件系统上也是如此。

http://example.com/image/foo.gif 的请求将导致服务器返回文件 /ftp/pub/image/foo.gif。 仅匹配完整的路径段,因此上述别名不会匹配对 http://example.com/imagefoo.gif 的请求。 有关使用正则表达式进行更复杂匹配的信息,请参见 AliasMatch 指令。

Alias "/icons/" "/usr/local/apache/icons/"

请注意,如果您在 URL-path 上包含尾部 /,则服务器将要求尾部 / 才能扩展别名。 也就是说,如果您使用

则 URL /icons 不会被别名化,因为它缺少尾部 /。 同样,如果您省略了 URL-path 上的斜杠,那么您也必须从 file-path 中省略它。

请注意,您可能需要指定其他 <Directory> 部分,这些部分涵盖别名的目标。 别名化发生在检查 <Directory> 部分之前,因此只有别名的目标会受到影响。(但是请注意,<Location> 部分会在别名执行之前运行一次,因此它们将适用。)

Alias "/image" "/ftp/pub/image"
<Directory "/ftp/pub/image">
    Require all granted
</Directory>

特别是,如果您正在创建指向 DocumentRoot 外部目录的 Alias,您可能需要显式允许访问目标目录。

URL-path 参数中的任何数量的斜杠都匹配请求的 URL-path 中的任何数量的斜杠。
如果 Alias 指令在 <Location><LocationMatch> 部分中使用,则 URL-path 将被省略,并且文件路径将使用 表达式语法 进行解释。

<Location "/image">
    Alias "/ftp/pub/image"
</Location>
<LocationMatch "/error/(?<NUMBER>[0-9]+)">
    Alias "/usr/local/apache/errors/%{env:MATCH_NUMBER}.html"
</LocationMatch>

此语法在 Apache 2.4.19 及更高版本中可用。

# /files/foo and /files/bar mapped to /ftp/pub/files/foo and /ftp/pub/files/bar
<Location "/files">
    AliasPreservePath on
    Alias "/ftp/pub/files"
</Location>
# /errors/foo and /errors/bar mapped to /var/www/errors.html
<Location "/errors">
    AliasPreservePath off
    Alias "/var/www/errors.html"
</Location>
top

请注意,当 AliasPreservePath 指令处于开启状态时,将把完整路径映射到目标。 当指令处于关闭状态时,所有 URL 都将映射到单个目标 URL。

描述AliasMatch 指令
将 URL 映射到文件系统位置使用正则表达式将 URL 映射到文件系统位置
Alias [URL-path] file-path|directory-pathAliasMatch regex file-path|directory-path
状态基础
服务器配置、虚拟主机、目录模块

服务器配置、虚拟主机

AliasMatch "^/icons(/|$)(.*)" "/usr/local/apache/icons$1$2"

此指令等效于 Alias,但使用 正则表达式,而不是简单的前缀匹配。 提供的正则表达式与 URL-path 匹配,如果匹配,服务器将把任何带括号的匹配项替换到给定的字符串中,并将其用作文件名。 例如,要激活 /icons 目录,可以使用

AliasMatch "(?i)^/image(.*)" "/ftp/pub/image$1"

可以使用 正则表达式 的全部功能。 例如,可以构造一个别名,该别名对 URL-path 进行不区分大小写的匹配

AliasAliasMatch 之间的一个细微差别是,Alias 会自动将 URI 的任何附加部分(超出匹配的部分)复制到右侧文件路径的末尾,而 AliasMatch 不会。 这意味着在几乎所有情况下,您都希望正则表达式匹配从头到尾的整个请求 URI,并在右侧使用替换。

换句话说,仅仅将 Alias 更改为 AliasMatch 不会产生相同的效果。 至少,您需要在正则表达式的开头添加 ^,并在末尾添加 (.*)$,并在替换的末尾添加 $1

Alias "/image/" "/ftp/pub/image/"

例如,假设您想用 AliasMatch 替换以下内容

AliasMatch "/image/" "/ftp/pub/image/"

这与以下内容不相同 - 不要这样做! 这会将所有在任何地方包含 /image/ 的请求发送到 /ftp/pub/image/

AliasMatch "^/image/(.*)$" "/ftp/pub/image/$1"

这是您要获得相同效果所需的代码

AliasMatch "^/image/(.*)\.jpg$" "/files/jpg.images/$1.jpg"
AliasMatch "^/image/(.*)\.gif$" "/files/gif.images/$1.gif"

当然,在 Alias 可以工作的地方使用 AliasMatch 毫无意义。 AliasMatch 允许您做更复杂的事情。 例如,您可以从不同的目录提供不同类型的文件

top

请求的 URL 中的多个前导斜杠在服务器将此模块的指令与请求的 URL-path 进行比较之前会被丢弃。

描述AliasPreservePath 指令
将 URL 映射到文件系统位置映射别名后的位置中的完整路径。
AliasPreservePath OFF|ON默认
Alias [URL-path] file-path|directory-path上下文
状态基础
服务器配置、虚拟主机、目录模块
AliasPreservePath OFF兼容性

2.4.58 及更高版本

使用 Alias 指令的两个参数版本时,将保留别名后的完整路径。 使用 Alias 指令的一个参数版本在 Location 指令中时,将丢弃完整路径,所有 URL 都将映射到目标表达式。

top

要使 Alias 指令的一个参数版本以与 Alias 指令的两个参数版本相同的方式保留路径,请启用此设置。

描述Redirect 指令
将 URL 映射到文件系统位置发送外部重定向,要求客户端获取不同的 URL
Alias [URL-path] file-path|directory-path服务器配置,虚拟主机,目录,.htaccess
覆盖FileInfo
状态基础
服务器配置、虚拟主机、目录模块

The Redirect 指令通过要求客户端重新获取新位置的资源来将旧 URL 映射到新 URL。

旧的 URL-path 是一个以斜杠开头的区分大小写(%-解码)路径。不允许使用相对路径。

新的 URL 可以是以下两种之一:以方案和主机名开头的绝对 URL,或者以斜杠开头的 URL-path。在后一种情况下,将添加当前服务器的方案和主机名。

然后,任何以 URL-path 开头的请求都将返回一个重定向请求到目标 URL 位置的客户端。匹配的 URL-path 之外的附加路径信息将附加到目标 URL。

# Redirect to a URL on a different host
Redirect "/service" "http://foo2.example.com/service"

# Redirect to a URL on the same host
Redirect "/one" "/two"

如果客户端请求 http://example.com/service/foo.txt,它将被告知改为访问 http://foo2.example.com/service/foo.txt。这包括带有 GET 参数的请求,例如 http://example.com/service/foo.pl?q=23&a=42,它将被重定向到 http://foo2.example.com/service/foo.pl?q=23&a=42。请注意,POST 将被丢弃。
仅匹配完整的路径段,因此上面的示例不会匹配对 http://example.com/servicefoo.txt 的请求。有关使用 表达式语法 进行更复杂匹配的信息,请省略 URL-path 参数,如下所述。或者,有关使用正则表达式进行匹配的信息,请参见 RedirectMatch 指令。

注意

Redirect 指令优先于 AliasScriptAlias 指令,无论它们在配置文件中的顺序如何。位于 Location 内部的 Redirect 指令优先于具有 URL-pathRedirectAlias 指令。

如果没有给出 status 参数,则重定向将是“临时”的(HTTP 状态 302)。这表示客户端资源已临时移动。可以使用 status 参数返回其他 HTTP 状态代码

permanent
返回永久重定向状态 (301),表示资源已永久移动。
temp
返回临时重定向状态 (302)。这是默认值。
seeother
返回“See Other”状态 (303),表示资源已被替换。
gone
返回“Gone”状态 (410),表示资源已被永久删除。使用此状态时,应省略 URL 参数。

可以通过将数字状态代码作为 status 的值来返回其他状态代码。如果状态在 300 到 399 之间,则必须存在 URL 参数。如果状态不在 300 到 399 之间,则必须省略 URL 参数。状态必须是 Apache HTTP Server 知道的有效 HTTP 状态代码(参见 http_protocol.c 中的函数 send_error_response)。

Redirect permanent "/one" "http://example.com/two"
Redirect 303 "/three" "http://example.com/other"

如果 Redirect 指令在 <Location><LocationMatch> 部分中使用,并且省略了 URL-path,则 URL 参数将使用 表达式语法 进行解释。
如果 Alias 指令在 <Location><LocationMatch> 部分中使用,则 URL-path 将被省略,并且文件路径将使用 表达式语法 进行解释。

<Location "/one">
    Redirect permanent "http://example.com/two"
</Location>
<Location "/three">
    Redirect 303 "http://example.com/other"
</Location>
<LocationMatch "/error/(?<NUMBER>[0-9]+)">
    Redirect permanent "http://example.com/errors/%{env:MATCH_NUMBER}.html"
</LocationMatch>
top

RedirectMatch 指令

描述根据当前 URL 的正则表达式匹配发送外部重定向
将 URL 映射到文件系统位置RedirectMatch [status] regex URL
Alias [URL-path] file-path|directory-path服务器配置,虚拟主机,目录,.htaccess
覆盖FileInfo
状态基础
服务器配置、虚拟主机、目录模块

此指令等效于 Redirect,但使用 正则表达式,而不是简单的前缀匹配。提供的正则表达式与 URL-path 匹配,如果匹配,服务器将把任何带括号的匹配项替换到给定的字符串中,并将其用作文件名。例如,要将所有 GIF 文件重定向到另一个服务器上的同名 JPEG 文件,可以使用

RedirectMatch "(.*)\.gif$" "http://other.example.com$1.jpg"

AliasAliasMatch 之间的区别相关的考虑因素也适用于 RedirectRedirectMatch 之间的区别。有关详细信息,请参见 AliasMatch

top

RedirectPermanent 指令

描述发送外部永久重定向,要求客户端获取不同的 URL
将 URL 映射到文件系统位置RedirectPermanent URL-path URL
Alias [URL-path] file-path|directory-path服务器配置,虚拟主机,目录,.htaccess
覆盖FileInfo
状态基础
服务器配置、虚拟主机、目录模块

此指令使客户端知道重定向是永久的(状态 301)。完全等效于 Redirect permanent

top

RedirectRelative 指令

描述允许相对重定向目标。
将 URL 映射到文件系统位置RedirectRelative On|Off
AliasPreservePath OFF|ONRedirectRelative Off
Alias [URL-path] file-path|directory-path上下文
状态基础
服务器配置、虚拟主机、目录模块
AliasPreservePath OFF兼容性

默认情况下,如果 Redirect 指令的目标 URL 是以 '/' 字符开头的相对 URL,则服务器会在响应客户端之前将其转换为绝对 URL。通过将 RedirectRelative 设置为“On”值,相对 URL 将直接呈现给客户端。

top

RedirectTemp 指令

描述发送外部临时重定向,要求客户端获取不同的 URL
将 URL 映射到文件系统位置RedirectTemp URL-path URL
Alias [URL-path] file-path|directory-path服务器配置,虚拟主机,目录,.htaccess
覆盖FileInfo
状态基础
服务器配置、虚拟主机、目录模块

此指令使客户端知道重定向只是临时的(状态 302)。完全等效于 Redirect temp

top

ScriptAlias 指令

描述将 URL 映射到文件系统位置,并将目标指定为 CGI 脚本
将 URL 映射到文件系统位置ScriptAlias [URL-path] file-path|directory-path
Alias [URL-path] file-path|directory-path上下文
状态基础
服务器配置、虚拟主机、目录模块

ScriptAlias 指令的行为与 Alias 指令相同,除了它还将目标目录标记为包含将由 mod_cgi 的 cgi-script 处理程序处理的 CGI 脚本。具有以 URL-path 开头的区分大小写(%-解码)路径的 URL 将映射到以第二个参数开头的脚本,第二个参数是本地文件系统中的完整路径名。

ScriptAlias "/cgi-bin/" "/web/cgi-bin/"

http://example.com/cgi-bin/foo 的请求将导致服务器运行脚本 /web/cgi-bin/foo。此配置本质上等效于

Alias "/cgi-bin/" "/web/cgi-bin/"
<Location "/cgi-bin">
    SetHandler cgi-script
    Options +ExecCGI
</Location>

ScriptAlias 也可以与您拥有的脚本或处理程序一起使用。例如

ScriptAlias "/cgi-bin/" "/web/cgi-handler.pl"

在这种情况下,在 /cgi-bin/ 中请求的所有文件都将由您配置的文件处理,这使您可以使用自己的自定义处理程序。您可能希望将其用作 CGI 的包装器,以便您可以添加内容或其他一些定制操作。

为了避免在配置发生更改时意外泄露 CGI 脚本的源代码,最好避免将 CGI 脚本放在 DocumentRoot 下。 ScriptAlias 通过同时映射 URL 和指定 CGI 脚本来简化此操作。如果您选择将 CGI 脚本放在已从 Web 访问的目录中,请不要使用 ScriptAlias。相反,请使用 <Directory>SetHandlerOptions,如下所示
<Directory "/usr/local/apache2/htdocs/cgi-bin">
    SetHandler cgi-script
    Options ExecCGI
</Directory>
这是必要的,因为多个 URL-paths 可以映射到同一个文件系统位置,这可能会绕过 ScriptAlias,如果 CGI 脚本没有被 Directory 部分限制,则可能会泄露 CGI 脚本的源代码。

如果 ScriptAlias 指令在 <Location><LocationMatch> 部分中使用,并且省略了 URL-path,则 URL 参数将使用 表达式语法 进行解释。
如果 Alias 指令在 <Location><LocationMatch> 部分中使用,则 URL-path 将被省略,并且文件路径将使用 表达式语法 进行解释。

<Location "/cgi-bin">
    ScriptAlias "/web/cgi-bin/"
</Location>
<LocationMatch "/cgi-bin/errors/(?<NUMBER>[0-9]+)">
    ScriptAlias "/web/cgi-bin/errors/%{env:MATCH_NUMBER}.cgi"
</LocationMatch>

报告错误

top

ScriptAliasMatch 指令

描述使用正则表达式将 URL 映射到文件系统位置,并将目标指定为 CGI 脚本
将 URL 映射到文件系统位置ScriptAliasMatch regex file-path|directory-path
Alias [URL-path] file-path|directory-pathAliasMatch regex file-path|directory-path
状态基础
服务器配置、虚拟主机、目录模块

此指令等效于 ScriptAlias,但使用 正则表达式,而不是简单的前缀匹配。提供的正则表达式与 URL-path 匹配,如果匹配,服务器将把任何带括号的匹配项替换到给定的字符串中,并将其用作文件名。例如,要激活标准 /cgi-bin,可以使用

ScriptAliasMatch "^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1"

至于 AliasMatch,正则表达式 的全部功能都可用。例如,可以构建一个别名,该别名对 URL-path 进行不区分大小写的匹配

ScriptAliasMatch "(?i)^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1"

AliasAliasMatch 之间的区别相关的考虑因素也适用于 ScriptAliasScriptAliasMatch 之间的区别。有关详细信息,请参见 AliasMatch

可用语言:  en  |  fr  |  ja  |  ko  |  tr 

top

将 URL 映射到文件系统

注意
这不是问答部分。此处放置的评论应针对改进文档或服务器的建议,如果它们被实施或被认为无效/主题外,可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表