共计 2510 个字符,预计需要花费 7 分钟才能阅读完成。
主要包括 Alias 指令、AliasMatch、Redirect、RedirectMatch、ScriptAlias 和 ScriptAliasMatch。它们由 mod_alias 模块提供,该模块用于提供简单的路径映射和重定向需求,更复杂的内容见 URL 重写 。
其中 ScriptAlias 用法和 Alias 完全一样,唯一不同的是 ScriptAlias 映射的目标路径被认为是 CGI 文件或包含 CGI 文件的目录,它们将会被 cgi 处理器处理执行。
1.1 处理顺序
Redirect、RedirectMatch 指令优先于 Alias、AliasMatch 进行处理;同类型的 Redirect 或 Alias 按照出现顺序进行匹配,匹配到了立即停止。
例如:如果几个指令按照下面的顺序出现:
Redirect1
Alias1
AliasMatch2
Alias3
RedirectMatch2
Redirect3
那么它们匹配的顺序为:Redirect1>RedirectMatch2>Redirect3>Alias1>AliasMatch2>Alias3。且一被匹配立即生效,后面的将被忽略。
1.2 Alias 和 AliasMatch
Alias 指令用于将 URL 路径映射到本地文件系统的路径,且本地路径不受 DocumentRoot 的限制。AliasMatch 是正则版本的 Alias。
Alias "/image" "/ftp/pub/image"
这将使得 http://myserver/image/foo.gif 的请求得到 /ftp/pub/image/foo.gif,由于是精确匹配的,所以 http://myserver/imagefoo.gif 不会返回该路径下的文件。但 Alias 有支持正则匹配的指令 AliasMatch。
AliasMatch "(?i)^/image(.*)" "/ftp/pub/image$1"
Alias 中如果 URL 部分包含了尾随斜线,则映射路径也应该包含斜线。例如下面的例子,这时如果请求 http://myserver/icons,将不会得到 /usr/local/apache/icons/$DirectoryIndex。
Alias "/icons/" "/usr/local/apache/icons/"
设置了 Alias 后,需要考虑映射到的本地路径的权限是否放行。特别是对于 DocumentRoot 外的路径,通常会因为 < Directory “/”> 的拒绝而导致这些映射目标不能访问。所以,对于这样的映射路径应该还需要为 Alias 指令配一个 < Directory > 容器放行。例如:
Alias "/image" "/ftp/pub/image"
<Directory "/ftp/pub/image">
Require all granted
</Directory>
如果 Alias 或 AliasMatch 出现在 < Location > 容器中,则它们只需要一个映射路径作为参数即可,因为 URL 已经包含在容器路径中。例如:
<Location "/image">
Alias "/ftp/pub/image"
</Location>
1.3 Redirect 和 RedirectMatch 指令
它们告知客户端资源已经转移,让它们重新发送对新路径资源的 HTTP 请求。
Redirect [status] old-URL new-URL
旧的 URL 必须是以斜线 ”/” 开头的绝对路径,新 URL 也必须是绝对路径,但可以是包含了 scheme://serverhost 的绝对路径,也可以是使用斜线开头的绝对路径。例如:
# 重定向到不同主机上
Redirect "/service" "http://foo2.example.com/service"
# 重定向到相同主机上
Redirect "/one" "/two"
如果客户端请求 http://example.com/service/foo.txt,将被告知重新去请求 http://foo2.example.com/service/foo.txt。可以是包含 GET 参数的 URL,例如 http://example.com/service/foo.pl?q=23&a=42,将重定向到 http://foo2.example.com/service/foo.pl?q=23&a=42。但注意,POST 方法会被无视。
如果没有指定 status 参数,则重定向是临时重定向 (HTTP status 302)。对客户端来说,此资源的路径变动是临时性的。以下几个 status 参数可以返回各自不同的 HTTP 状态码:
- permanent:返回一个永久性重定向状态码 (301),表示此资源的位置变动是永久性的。
- temp:返回一个临时性重定向状态码 (302),这是默认值。
- seeother:返回一个 ” 参见 ” 状态码 (303),表示此资源已经被替代。
- gone:返回一个 ” 已废弃 ” 状态码 (410),表示此资源已经被永久性地删除了。如果指定了这个状态码,则 new-URL 参数将被忽略。
status 可以被指定为某个数值以返回其他指定状态码。如果此值在 300-399 之间,则必须提供 new-URL 参数,否则必须忽略 new-URL,但不管如何,值必须是有效的 http 状态码值。
和 alias 指令一样,如果写在 Location 容器中,则 old-URL 忽略,因为它已经包含在 location 容器的路径中。例如:
<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>
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-10/147319.htm