描述: | 提供在文档树中映射主机文件系统的不同部分并进行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
。请注意,POST
s将被丢弃。
仅匹配完整的路径段,因此上面的示例将不匹配对的请求
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_response
http_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
详细信息,请参见。