Web Server 经过改进,可支持在配置文件中使用正则表达式(也称为模式)和请求时间参数插值。此外,与支持匹配的通配符模式还扩展到 server.xml。URL 重定向是以 SAF 方式实现的。重定向 SAF 允许您重定向与某一前缀匹配的 URI。您可以使用 from 参数指定前缀,使用 url 或 url-prefix 参数指定要重定向到的 URL。在 Web Server Web Server 中,from 参数是可选的。如果省略 from,将重定向所有 URI。
在 obj.conf 文件中,新的 <If>、<Elseif> 和 <Else> 标记支持 SAF 参数。这些标记包含指令。使用这些标记,可以定义执行指令的条件。此外,也可以使用这些标记动态生成 SAF 参数。
Web Server 提供了 URL 重写功能,该功能是 Apache HTTP 服务器的 mod_rewrite 模块的超集。与 Apache 的 mod_rewrite 函数不同,<If> 标记提供以下功能:
可以处理 URI、路径、标头字段和响应主体。
可在请求处理的任何阶段使用。
可与任何 SAF(包括第三方插件)一起使用。
以下面的指令为例:
NameTrans fn="redirect" from="/site1" url="http://site1.mycompany.com" |
以上指令可以使用正则表达式重写,如下所示:
<If $uri =~ '^/site1'> NameTrans fn="redirect" url="http://site1.mycompany.com" </If> |
在以上代码片段中,请注意使用了正则表达式,而非 from 参数。如果需要将对 /site1/* 的所有请求重定向至 http://site1.mycompany.com/*/index.html,请注意以下方法:
<If $uri =~ '^/site1/(.*)'> NameTrans fn="redirect" url="http://site1.mycompany.com/$1/index.html" </If> |
其中,<If> 标记将所有匹配值 (.*) 分配给变量 $1。url 参数中的 $1 将被动态替换为原始请求中的值。这意味着,以上 obj.conf 代码片段将会导致对 /site1/download 的请求重定向至 http://site1.mycompany.com.com/download/index.html。
组合 <If> 和 redirect 可提供 mod_rewrite 的某些灵活性。但是,与 mod_rewrite 不同,<If> 可用于重定向和重写 URL 以外的操作。<If> 还可以与任何 SAF(包括第三方插件)一起使用。
以上方法可配置一个“302 已暂时移动”的重定向。在 Web Server 中,还可以添加 status="301" 参数以指示需要“301 已永久移动”的重定向。
NameTrans fn="redirect" from="/path" url="http://server.example.com" status="301" |