<-
Apache HTTP 服务器 2.4 > Apache模块mod_alias

Apache模块mod_alias

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

摘要

此模块中包含的指令允许在请求到达服务器时对URL进行操纵和控制。的 AliasScriptAlias指令用于URL和文件系统路径之间进行映射。这允许内容不直接DocumentRoot作为Web文档树的一部分。该ScriptAlias指令还具有将目标目录标记为仅包含CGI脚本的效果。

Redirect 指令用于指示客户透过不同的URL的新请求。当资源移至新位置时,通常会使用它们。

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

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

支持Apache!

主题

指令

错误修正清单

也可以看看

最佳

加工顺序

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

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

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

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

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

AliasScriptAlias并且 Redirect指令是一个内使用<Location><LocationMatch> 部分,这些指令将优先于任何全局定义的AliasScriptAliasRedirect指令。

最佳

别名 指令

描述:将URL映射到文件系统位置
句法:Alias [URL-path] file-path|directory-path
内容:服务器配置,虚拟主机,目录
状态:基础
模块:mod_alias

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

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

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

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

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

那么该网址/icons将不会被别名,因为它缺少后缀/。同样,如果您省略了URL路径上的斜杠, 那么您也必须从file-path中省略它 。

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

特别是,如果要在之外创建Alias目录DocumentRoot,则可能需要显式允许访问目标目录。

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

在任意数量的斜线URL路径参数匹配任何数量的请求的URL路径斜杠。

如果Alias<Location><LocationMatch> 部分中使用了伪指令 ,则将省略URL路径,并使用表达式语法解释文件路径。
该语法在Apache 2.4.19和更高版本中可用。

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

AliasMatch 指令

描述:使用正则表达式将URL映射到文件系统位置
句法:AliasMatch regex file-path|directory-path
内容:服务器配置,虚拟主机
状态:基础
模块:mod_alias

该指令等效于Alias,但使用 正则表达式,而不是简单的前缀匹配。提供的正则表达式与URL路径匹配,如果匹配,则服务器会将所有带括号的匹配替换为给定的字符串,并将其用作文件名。例如,要激活/icons目录,可以使用:

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

可以使用所有范围的正则表达式 功能。例如,可以使用URL路径的大小写不敏感匹配来构造别名:

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

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

换句话说,仅更改 AliasAliasMatch不会产生相同的效果。至少,您需要添加^到正则表达式的开头,然后添加(.*)$到结尾,再添$1加到替换的结尾。

例如,假设您要用AliasMatch替换它:

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

这不是等效的-不要这样做!这会将所有包含/ image /的请求发送到/ ftp / pub / image /:

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

这是获得相同效果所需要的:

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

当然,使用AliasMatch 在哪里Alias工作毫无意义。 AliasMatch让您做更复杂的事情。例如,您可以提供来自不同目录的不同类型的文件:

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

在将来自此模块的指令与请求的URL路径进行比较之前,服务器会丢弃请求的URL中的多个前导斜杠。

最佳

重定向 指令

描述:发送外部重定向,要求客户端获取其他URL
句法:Redirect [status] [URL-path] URL
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:基础
模块:mod_alias

Redirect指令通过要求客户端在新位置重新获取资源,从而将旧URL映射为新URL。

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

URL可以是以方案和主机名开头的绝对URL,也可以是以斜杠开头的URL路径。在后一种情况下,将添加当前服务器的方案和主机名。

然后,任何以URL-path开头的请求都将在目标URL的位置向客户端返回重定向请求 。匹配的URL路径之外的其他路径信息 将附加到目标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。请注意,POSTs将被丢弃。
仅匹配完整的路径段,因此上面的示例将不匹配对的请求 http://example.com/servicefoo.txt。要使用表达式语法进行更复杂的匹配,请如下所述省略URL-path参数。另外,要使用正则表达式进行匹配,请参见RedirectMatch指令。

注意

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

如果未提供状态参数,则重定向将为“临时”(HTTP状态302)。这向客户端指示资源已临时移动。该状态 参数可以用来返回其他HTTP状态代码:

常驻
返回指示资源已永久移动的永久重定向状态(301)。
温度
返回临时重定向状态(302)。这是默认值。
看见者
返回指示资源已被替换的“查看其他”状态(303)。
不见了
返回“已消失”状态(410),指示资源已被永久删除。使用此状态时,应省略URL参数。

其他状态码可以通过给数字状态码的值返回的状态。如果状态在300到399之间,则必须存在URL参数。如果状态不在 300到399之间,则 必须省略URL参数。该状态必须是Apache HTTP Server已知的有效HTTP状态代码(请参阅send_error_responsehttp_protocol.c中的功能 )。

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

如果Redirect<Location><LocationMatch> 部分中使用了伪指令而 省略了URL路径,则将使用表达式语法解释URL参数。 该语法在Apache 2.4.19和更高版本中可用。

<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>
最佳

RedirectMatch 指令

描述:根据当前URL的正则表达式匹配发送外部重定向
句法:RedirectMatch [status] regex URL
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:基础
模块:mod_alias

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

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

有关之间的差异的考虑 Alias,并 AliasMatch 同样适用于之间的差异 RedirectRedirectMatch。有关AliasMatch详细信息,请参见。

最佳

重定向永久性 指令

描述:发送外部永久重定向,要求客户端获取其他URL
句法:RedirectPermanent URL-path URL
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:基础
模块:mod_alias

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

最佳

RedirectTemp 指令

描述:发送外部临时重定向,要求客户端获取其他URL
句法:RedirectTemp URL-path URL
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:文件信息
状态:基础
模块:mod_alias

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

最佳

ScriptAlias 指令

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

ScriptAlias指令与该指令具有相同的行为Alias ,除了它另外将目标目录标记为包含将由mod_cgi的cgi-script处理程序处理的CGI脚本。具有以URL路径开头的区分大小写(%解码)路径的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脚本放置在下方 DocumentRoot,以免在配置发生更改时意外泄露其源代码。将 ScriptAlias使得这个简单的通过映射URL,并在同一时间指定的CGI脚本。如果您确实选择将CGI脚本放在可从Web访问的目录中,请不要使用 ScriptAlias。而是使用<Directory>SetHandler和,Options如:
<Directory "/usr/local/apache2/htdocs/cgi-bin">
    SetHandler cgi-script
    Options ExecCGI
</Directory>
这是必要的,因为多个URL路径可以映射到相同的文件系统位置,ScriptAlias如果它们不受Directory节的限制,则有可能绕过 CGI脚本的源代码并显示它们 。

如果ScriptAlias<Location><LocationMatch> 部分中使用了伪指令而省略了URL路径,则将使用表达式语法解释URL参数。
该语法在Apache 2.4.19和更高版本中可用。

<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>

也可以看看

最佳

ScriptAliasMatch 指令

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

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

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

至于AliasMatch,则可以使用所有范围的正则表达式。例如,可以使用URL路径的大小写不敏感匹配来构造别名:

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

有关之间的差异的考虑 Alias,并 AliasMatch 同样适用于之间的差异 ScriptAliasScriptAliasMatch。有关AliasMatch详细信息,请参见。

可用语言: zh  |  fr  |  ja  |  ko  |  TR 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。