Apache HTTP Server 版本2.2
Apache模块 mod_alias
说明 | 提供从文件系统的不同部分到文档树的映射和URL重定向 |
---|---|
状态 | 基本(B) |
模块名 | alias_module |
源文件 | mod_alias.c |
概述
此模块提供的指令可以操控作为请求到达服务器的URL。Alias
和ScriptAlias
指令用于在URL和文件系统路径之间实现映射,使不在DocumentRoot
目录下的内容也能成为文档树的一部分,其中,ScriptAlias
指令有更多一层的含义,它标明此目标目录下只有CGI脚本。
Redirect
指令引导客户端以一个不同的URL产生一个新的请求,常用于一个资源被移动到一个新位置的时候。
mod_alias
被设计成处理普通的URL操作。复杂的URL操作,比如处理请求字符串,请使用mod_rewrite
提供的强大功能。
处理顺序
出现在不同作用域(context)中的别名指令以及重定向指令和其他指令一样,按照标准的合并规则进行处理。但是当多个别名指令或重定向指令出现在同一个作用域(context)中的时候(比如在同一个<VirtualHost>
段),处理顺序就比较特别了:
首先,所有重定向指令都优先于别名指令被处理,因此一个匹配Redirect
或RedirectMatch
的请求将永远不会被别名指令处理。其次,别名指令和重定向指令将按照他们在配置文件中出现的先后顺序进行匹配,并由最先匹配到的指令进行处理。
因为这个原因,当两个或两个以上的这些指令作用于同一个子路径时,你必须将最特殊的路径放在最前面,以便所有指令都能正确地生效。例如下面的例子将按照你原本的意愿正常工作:
Alias /foo/bar /baz
Alias /foo /gaq
但是,如果将上面两条指令的顺序颠倒,则后一条指令永远也得不到匹配的机会。
Alias 指令
说明 | 映射URL到文件系统的特定区域 |
---|---|
语法 | Alias URL-path
file-path|directory-path |
作用域 | server config, virtual host |
状态 | 基本(B) |
模块 | mod_alias |
Alias
指令使文档可以被存储在DocumentRoot
以外的本地文件系统中。以(%已解码的)url-path路径开头的URL可以被映射到以directory-path开头的本地文件。
示例:
Alias /image /ftp/pub/image
对"http://myserver/image/foo.gif"的请求,服务器将返回"/ftp/pub/image/foo.gif"文件。因为仅匹配完整路径,所以上述例子不会匹配对"http://myserver/imagefoo.gif"的请求。对于使用正则表达式的匹配,请参见AliasMatch
指令。
注意:如果url-path中有后缀"/",则服务器要求有后缀"/"以扩展此别名。也就是说"Alias /icons/ /usr/local/apache/icons/
"并不能对"/icons
"实现别名。
注意,可能需要额外指定一个<Directory>
段来覆盖别名的最终对象。由于只有出现在<Directory>
段之前的别名才会被检测,所以它只对最终对象生效。(由于执行别名操作之前<Location>
段会被首先扫描一次,所以它们也是有效的)
特别地,如果对在DocumentRoot
之外的某个目录建立了一个Alias
,则可能需要明确的对目标目录设定访问权限。
示例:
Alias /image /ftp/pub/image
<Directory /ftp/pub/image>
Order allow,deny
Allow from all
</Directory>
AliasMatch 指令
说明 | 使用正则表达式映射URL到文件系统 |
---|---|
语法 | AliasMatch regex file-path|directory-path |
作用域 | server config, virtual host |
状态 | 基本(B) |
模块 | mod_alias |
这个指令与Alias
等效,但是它使用了标准的正则表达式,而不是简单的前缀匹配。如果此正则表达式与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,要使用"/icons
"目录,可以:
AliasMatch ^/icons(.*) /usr/local/apache/icons$1
Redirect 指令
说明 | 发送一个外部重定向使客户端重定向到一个不同的URL |
---|---|
语法 | Redirect [status] URL-path
URL |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | FileInfo |
状态 | 基本(B) |
模块 | mod_alias |
该指令将一个老URL映射为一个新URL,此新URL被返回到客户端使之重定向到一个新地址。
老URL-path是一个(%已解码的)以"/"开头的(网络空间)绝对路径。新URL是一个(%已编码的)以"/"开头的(网络空间)绝对路径或者包含协议名和主机名的完整URL。当新URL不包含协议名和主机名时将使用与老URL-path相同的当前值。
这样,对任何以老URL-path开头的请求,将返回一个指向以新URL开头的重定向应答。
示例:
Redirect /service http://foo2.example.com/service
如果客户端请求"http://example.com/service/foo.txt",则会被重定向到"http://foo2.example.com/service/foo.txt"。因为仅匹配完整路径,所以上述例子不会匹配"http://example.com/servicefoo.txt"请求。对于使用正则表达式的匹配,请参见RedirectMatch
指令。
注意
重定向指令总是优先于Alias和ScriptAlias指令,而无论他们在配置文件中的顺序如何。
如果没有指定status参数,则重定向是"临时的"(HTTP status 302)。也就是对客户端来说,此资源的位置变动是临时性的。此status参数可以返回以下HTTP状态码:
- permanent
- 返回一个永久性重定向状态码(301),表示此资源的位置变动是永久性的。
- temp
- 返回一个临时性重定向状态码(302),这是默认值。
- seeother
- 返回一个"参见"状态码(303),表示此资源已经被替代。
- gone
- 返回一个"已废弃"状态码(410),表示此资源已经被永久性地删除了。如果指定了这个状态码,则URL参数将被忽略。
status可以被指定为数字状态以返回其他状态码。如果此状态在300-399之间,则必须提供URL参数,否则将被忽略。注意,此状态码必须是Apache已知的(参见http_protocol.c中的send_error_response
函数)。
示例:
Redirect permanent /one http://example.com/two
Redirect 303 /three http://example.com/other
RedirectMatch 指令
说明 | 基于正则表达式匹配对当前的URL发送一个外部重定向 |
---|---|
语法 | RedirectMatch [status] regex URL |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | FileInfo |
状态 | 基本(B) |
模块 | mod_alias |
该指令与Redirect
等效,但是它使用了标准的正则表达式,而不是简单的前缀匹配。如果regex与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,重定向所有GIF文件到另一个服务器上同名的JPEG文件,可以:
RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
RedirectPermanent 指令
说明 | 发送一个外部永久重定向使客户端重定向到一个不同的URL |
---|---|
语法 | RedirectPermanent URL-path URL |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | FileInfo |
状态 | 基本(B) |
模块 | mod_alias |
此指令告知客户端此重定向是永久性的(status 301)。与"Redirect permanent
"等效。
RedirectTemp 指令
说明 | 发送一个外部临时重定向使客户端重定向到一个不同的URL |
---|---|
语法 | RedirectTemp URL-path URL |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | FileInfo |
状态 | 基本(B) |
模块 | mod_alias |
此指令告知客户端此重定向只是临时性的(status 302)。与"Redirect temp
"等效。
ScriptAlias 指令
说明 | 映射一个URL到文件系统并视之为CGI脚本 |
---|---|
语法 | ScriptAlias URL-path file-path|directory-path |
作用域 | server config, virtual host |
状态 | 基本(B) |
模块 | mod_alias |
ScriptAlias
指令的行为与Alias
指令相同,但同时它又标明此目录中含有应该由cgi-script处理器处理的CGI脚本。以URL-path开头的(%已解码的)的URL会被映射到由第二个参数指定的具有完整路径名的本地文件系统中的脚本。
示例:
ScriptAlias /cgi-bin/ /web/cgi-bin/
对http://myserver/cgi-bin/foo
的请求会引导服务器执行/web/cgi-bin/foo
脚本。
ScriptAliasMatch 指令
说明 | 使用正则表达式映射一个URL到文件系统并视之为CGI脚本 |
---|---|
语法 | ScriptAliasMatch regex file-path|directory-path |
作用域 | server config, virtual host |
状态 | 基本(B) |
模块 | mod_alias |
该指令与ScriptAlias
等效,但是它使用了标准的正则表达式,而不是简单的前缀匹配。如果regex与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,要使用标准的/cgi-bin
,可以:
ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1