Sun Java System Web Server 7.0 管理员指南

使用正则表达式进行 URL 重定向

Sun Java System Web Server 7.0 经过增强,支持在配置文件中使用正则表达式(也称为模式)和请求时间参数插值。此外,与支持匹配的通配符模式还扩展到 server.xml。URL 重定向是以 SAF 方式实现的。重定向 SAF 允许您重定向与某一前缀匹配的 URI。您可以使用 from 参数指定前缀,使用 urlurl-prefix 参数指定要重定向到的 URL。在 Sun Java System Web Server 7.0 中,from 参数是可选的。如果省略 from,将重定向所有 URI。

在 obj.conf 文件中,新的 <If><Elseif><Else> 标记支持 SAF 参数。请参见附录 - obj.conf - 语法和用法。这些标记包含指令。使用这些标记,可以定义执行指令的条件。此外,也可以使用这些标记动态生成 SAF 参数。

Sun Java System Web Server 7.0 提供了 URL 重写功能,该功能是 Apache HTTP 服务器的 mod_rewrite 模块的超集。与 Apache 的 mod_rewrite 函数不同,<If> 标记提供以下功能:

以下面的指令为例:


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 已暂时移动”的重定向。在 Sun Java System Web Server 7.0 中,还可以添加 status="301" 参数,以指示您需要一个“301 已永久移动”的重定向。


NameTrans fn="redirect" from="/path" url="http://server.example.com" status="301"