| 描述: | 提供在文档树中映射主机文件系统的不同部分并进行URL重定向的功能 |
|---|---|
| 状态: | 基础 |
| 模块标识符: | alias_module |
| 源文件: | mod_alias.c |
此模块中包含的指令允许在请求到达服务器时对URL进行操纵和控制。的
Alias和ScriptAlias指令用于URL和文件系统路径之间进行映射。这允许内容不直接DocumentRoot作为Web文档树的一部分。该ScriptAlias指令还具有将目标目录标记为仅包含CGI脚本的效果。
该Redirect
指令用于指示客户透过不同的URL的新请求。当资源移至新位置时,通常会使用它们。
在
或
区段中使用Alias,
ScriptAlias和
Redirect指令时,可以使用表达式语法来操作目标路径或URL。
<Location><LocationMatch>
mod_alias用于处理简单的URL操作任务。对于更复杂的任务,例如处理查询字符串,请使用提供的工具
mod_rewrite。
根据标准合并规则,像其他指令一样处理在不同上下文中发生的别名和重定向。但是,当多个别名或重定向在同一上下文中(例如,在同<VirtualHost>
一部分中)发生时,它们将以特定顺序进行处理。
首先,所有重定向都在处理别名之前进行处理,因此,匹配Redirect或RedirectMatch永远不会应用别名的请求。其次,别名和重定向按照它们在配置文件中出现的顺序进行处理,第一个匹配项优先。
因此,当两个或多个这些指令应用于同一子路径时,必须首先列出最特定的路径,以使所有指令均生效。例如,以下配置将按预期工作:
Alias "/foo/bar" "/baz" Alias "/foo" "/gaq"
但是,如果按顺序颠倒了以上两个指令,则
/foo Alias
总是匹配/foo/bar Alias,因此后面的指令将被忽略。
当Alias,
ScriptAlias并且
Redirect指令是一个内使用<Location>
或<LocationMatch>
部分,这些指令将优先于任何全局定义的Alias,
ScriptAlias和
Redirect指令。
| 描述: | 将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>
| 描述: | 使用正则表达式将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,并在右侧使用替换。
换句话说,仅更改
Alias为
AliasMatch不会产生相同的效果。至少,您需要添加^到正则表达式的开头,然后添加(.*)$到结尾,再添$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指令优先于Alias和ScriptAlias
指令,无论它们在配置文件中的顺序如何。Redirect位置内的指令优先于Redirect和Alias具有URL-path的指令。
如果未提供状态参数,则重定向将为“临时”(HTTP状态302)。这向客户端指示资源已临时移动。该状态 参数可以用来返回其他HTTP状态代码:
其他状态码可以通过给数字状态码的值返回的状态。如果状态在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>
| 描述: | 根据当前URL的正则表达式匹配发送外部重定向 |
|---|---|
| 句法: | RedirectMatch [status] regex
URL |
| 内容: | 服务器配置,虚拟主机,目录,.htaccess |
| 覆写: | 文件信息 |
| 状态: | 基础 |
| 模块: | mod_alias |
该指令等效于Redirect,但使用
正则表达式,而不是简单的前缀匹配。提供的正则表达式与URL路径匹配,如果匹配,则服务器会将所有带括号的匹配替换为给定的字符串,并将其用作文件名。例如,要将所有GIF文件重定向到另一台服务器上的同名JPEG文件,则可以使用:
RedirectMatch "(.*)\.gif$" "http://other.example.com$1.jpg"
有关之间的差异的考虑
Alias,并
AliasMatch
同样适用于之间的差异
Redirect和
RedirectMatch。有关AliasMatch详细信息,请参见。
| 描述: | 发送外部永久重定向,要求客户端获取其他URL |
|---|---|
| 句法: | RedirectPermanent URL-path URL |
| 内容: | 服务器配置,虚拟主机,目录,.htaccess |
| 覆写: | 文件信息 |
| 状态: | 基础 |
| 模块: | mod_alias |
该指令使客户端知道重定向是永久的(状态301)。完全等同于Redirect
permanent。
| 描述: | 发送外部临时重定向,要求客户端获取其他URL |
|---|---|
| 句法: | RedirectTemp URL-path URL |
| 内容: | 服务器配置,虚拟主机,目录,.htaccess |
| 覆写: | 文件信息 |
| 状态: | 基础 |
| 模块: | mod_alias |
该指令使客户端知道重定向只是临时的(状态302)。完全等同于
Redirect temp。
| 描述: | 将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的包装,以便可以添加内容或其他定制操作。
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>
| 描述: | 使用正则表达式将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
同样适用于之间的差异
ScriptAlias和
ScriptAliasMatch。有关AliasMatch详细信息,请参见。