Apache中的mod_alias模块
模块名:alias_module
源文件:mod_alias.c
模块提供的指令可以映射文档以及URL重定向,mod_alias旨在处理简单的URL操作任务。对于更复杂的任务,建议使用工具mod_rewrite。
处理顺序
首先,在处理别名之前处理所有重定向,其次,别名和重定向按照它们在配置文件中出现的顺序进行处理,第一次匹配优先。
Alias "/foo/bar" "/baz"
Alias "/foo" "/gaq"
但是如果将上面两条指令的顺序颠倒,则后一条指令永远也得不到匹配的机会。
Alias指令
映射URL到文件系统的特定区域,使文档可以被存储在DocumentRoot以外的本地文件系统中。
语法:Alias URL-path file-path|directory-path
例:Alias "/image" "/ftp/pub/image"
对http://myserver/image/foo.gif的请求,服务器将返回/ftp/pub/image/foo.gif文件,由于Alias仅匹配完整路径,所以不会匹配对"http://myserver/imagefoo.gif"的请求。
如果对在DocumentRoot之外的某个目录建立了一个Alias ,则可能需要明确的对目标目录设定访问权限:
Alias "/image" "/ftp/pub/image"Require all granted
AliasMatch指令
使用正则表达式映射URL到文件系统
语法:AliasMatch regex file-path|directory-path
这个指令与Alias等效,但是它使用了标准的正则表达式,而不是简单的前缀匹配。如果此正则表达式与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,要使用"/icons"目录,可以:
AliasMatch ^/icons(.*) /usr/local/apache/icons$1
Redirect指令
发送一个外部重定向使客户端重定向到一个不同的URL
语法:Redirect [status] 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"请求。
status参数可能的值以及对应的返回的HTTP状态码:
permanent:返回一个永久性重定向状态码(301)
temp:返回一个临时性重定向状态码(302),这是默认值。
seeother:返回一个"参见"状态码(303),表示此资源已经被替代。
gone:返回一个"已废弃"状态码(410),表示此资源已经被永久性地删除了。如果指定了这个状态码,则URL参数将被忽略。
status可以被指定为数字状态以返回其他状态码。如果此状态在300-399之间,则必须提供URL参数,否则将被忽略。
Redirect 303 /three http://example.com/other
RedirectMatch指令
基于正则表达式匹配对当前的URL发送一个外部重定向
语法:RedirectMatch [status] regex URL
该指令与Redirect等效,但是它使用了标准的正则表达式,而不是简单的前缀匹配。
例如,重定向所有GIF文件到另一个服务器上同名的JPEG文件:
RedirectMatch (.*).gif$ http://www.anotherserver.com$1.jpg
RedirectPermanent指令:告知客户端此重定向是永久性的(status 301)。与"Redirect permanent"等效。
语法:RedirectPermanent URL-path URL
RedirectTemp指令:告知客户端此重定向只是临时性的(status 302)。与"Redirect temp"等效。
语法:RedirectTemp URL-path URL
ScriptAlias指令:映射一个URL到文件系统并视之为CGI脚本
语法:ScriptAlias URL-path file-path|directory-path
ScriptAlias指令的行为与Alias指令相同,但同时它又标明此目录中含有应该由cgi-script处理器处理的CGI脚本。
ScriptAliasMatch指令:使用正则表达式映射一个URL到文件系统并视之为CGI脚本
语法:ScriptAliasMatch regex file-path|directory-path
该指令与ScriptAlias等效,但是它使用了标准的正则表达式匹配。例如:
ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1