🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Apache模块 mod_alias | [说明](#calibre_link-11) | 提供从文件系统的不同部分到文档树的映射和URL重定向 | | --- | --- | | [状态](#calibre_link-12) | 基本(B) | | [模块名](#calibre_link-13) | alias_module | | [源文件](#calibre_link-14) | mod_alias.c | ### 概述 此模块提供的指令可以操控作为请求到达服务器的URL。`Alias`和`ScriptAlias`指令用于在URL和文件系统路径之间实现映射,使不在`DocumentRoot`目录下的内容也能成为文档树的一部分,其中,`ScriptAlias`指令有更多一层的含义,它标明此目标目录下只有CGI脚本。 `Redirect`指令引导客户端以一个不同的URL产生一个新的请求,常用于一个资源被移动到一个新位置的时候。 `mod_alias`被设计成处理普通的URL操作。复杂的URL操作,比如处理请求字符串,请使用`mod_rewrite`提供的强大功能。 ## 处理顺序 出现在不同作用域(context)中的别名指令以及重定向指令和其他指令一样,按照标准的[合并规则](#calibre_link-452)进行处理。但是当多个别名指令或重定向指令出现在同一个作用域(context)中的时候(比如在同一个`<VirtualHost>`段),处理顺序就比较特别了: 首先,所有重定向指令都优先于别名指令被处理,因此一个匹配`Redirect`或`RedirectMatch`的请求将永远不会被别名指令处理。其次,别名指令和重定向指令将按照他们在配置文件中出现的先后顺序进行匹配,并由最先匹配到的指令进行处理。 因为这个原因,当两个或两个以上的这些指令作用于同一个子路径时,你必须将最特殊的路径放在最前面,以便所有指令都能正确地生效。例如下面的例子将按照你原本的意愿正常工作: ``` Alias /foo/bar /baz Alias /foo /gaq ``` 但是,如果将上面两条指令的顺序颠倒,则后一条指令永远也得不到匹配的机会。 ## Alias 指令 | [说明](#calibre_link-18) | 映射URL到文件系统的特定区域 | | --- | --- | | [语法](#calibre_link-19) | `Alias URL-path file-path&#124;directory-path` | | [作用域](#calibre_link-20) | server config, virtual host | | [状态](#calibre_link-21) | 基本(B) | | [模块](#calibre_link-22) | 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 指令 | [说明](#calibre_link-18) | 使用正则表达式映射URL到文件系统 | | --- | --- | | [语法](#calibre_link-19) | `AliasMatch regex file-path&#124;directory-path` | | [作用域](#calibre_link-20) | server config, virtual host | | [状态](#calibre_link-21) | 基本(B) | | [模块](#calibre_link-22) | mod_alias | 这个指令与`Alias`等效,但是它使用了标准的[正则表达式](#calibre_link-67 "see glossary"),而不是简单的前缀匹配。如果此正则表达式与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,要使用"`/icons`"目录,可以: ``` AliasMatch ^/icons(.*) /usr/local/apache/icons$1 ``` ## Redirect 指令 | [说明](#calibre_link-18) | 发送一个外部重定向使客户端重定向到一个不同的URL | | --- | --- | | [语法](#calibre_link-19) | `Redirect [status] URL-path URL` | | [作用域](#calibre_link-20) | server config, virtual host, directory, .htaccess | | [覆盖项](#calibre_link-66) | FileInfo | | [状态](#calibre_link-21) | 基本(B) | | [模块](#calibre_link-22) | 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 指令 | [说明](#calibre_link-18) | 基于正则表达式匹配对当前的URL发送一个外部重定向 | | --- | --- | | [语法](#calibre_link-19) | `RedirectMatch [status] regex URL` | | [作用域](#calibre_link-20) | server config, virtual host, directory, .htaccess | | [覆盖项](#calibre_link-66) | FileInfo | | [状态](#calibre_link-21) | 基本(B) | | [模块](#calibre_link-22) | mod_alias | 该指令与`Redirect`等效,但是它使用了标准的[正则表达式](#calibre_link-67 "see glossary"),而不是简单的前缀匹配。如果regex与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,重定向所有GIF文件到另一个服务器上同名的JPEG文件,可以: ``` RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg ``` ## RedirectPermanent 指令 | [说明](#calibre_link-18) | 发送一个外部永久重定向使客户端重定向到一个不同的URL | | --- | --- | | [语法](#calibre_link-19) | `RedirectPermanent URL-path URL` | | [作用域](#calibre_link-20) | server config, virtual host, directory, .htaccess | | [覆盖项](#calibre_link-66) | FileInfo | | [状态](#calibre_link-21) | 基本(B) | | [模块](#calibre_link-22) | mod_alias | 此指令告知客户端此重定向是永久性的(status 301)。与"`Redirect permanent`"等效。 ## RedirectTemp 指令 | [说明](#calibre_link-18) | 发送一个外部临时重定向使客户端重定向到一个不同的URL | | --- | --- | | [语法](#calibre_link-19) | `RedirectTemp URL-path URL` | | [作用域](#calibre_link-20) | server config, virtual host, directory, .htaccess | | [覆盖项](#calibre_link-66) | FileInfo | | [状态](#calibre_link-21) | 基本(B) | | [模块](#calibre_link-22) | mod_alias | 此指令告知客户端此重定向只是临时性的(status 302)。与"`Redirect temp`"等效。 ## ScriptAlias 指令 | [说明](#calibre_link-18) | 映射一个URL到文件系统并视之为CGI脚本 | | --- | --- | | [语法](#calibre_link-19) | `ScriptAlias URL-path file-path&#124;directory-path` | | [作用域](#calibre_link-20) | server config, virtual host | | [状态](#calibre_link-21) | 基本(B) | | [模块](#calibre_link-22) | 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 指令 | [说明](#calibre_link-18) | 使用正则表达式映射一个URL到文件系统并视之为CGI脚本 | | --- | --- | | [语法](#calibre_link-19) | `ScriptAliasMatch regex file-path&#124;directory-path` | | [作用域](#calibre_link-20) | server config, virtual host | | [状态](#calibre_link-21) | 基本(B) | | [模块](#calibre_link-22) | mod_alias | 该指令与`ScriptAlias`等效,但是它使用了标准的[正则表达式](#calibre_link-67 "see glossary"),而不是简单的前缀匹配。如果regex与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,要使用标准的`/cgi-bin` ,可以: ``` ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1 ```