http.redir

redir会在网址符合指定模式时发送给客户端HTTP重定向的状态码。也可以创建一个有条件的重定向。

语法

redir from to [code]
  • from 匹配的请求路径(必须精确匹配,除非是匹配全部路径的/)。

  • to 要跳转到的路径(可以使用请求占位符)。

  • code 相应的HTTP状态码;必须是300-308之间(不包括306)。也可以为浏览器发送meta的重定向标记。默认状态码是"301 Moved Permanently"。

创建一个永久,全部重定向的指令,忽略from值。

redir to

如果你有很多重定向,可以通过创建一个块来共享重定向代码。

redir [code] {
    from to [code]
}

每一行定义一条重定向,且可以有选择性地覆盖在块顶部定义的重定向代码。如果没有指定重定向代码,则使用默认值。

也可以是有条件的一组重定向

redir [code] {
    if    a cond b
    if_op [and|or]
    ...
}
  • if 指定一个重写条件,在默认情况下,多个if条件会通过AND组合在一起。ab可以是任何字符串,也可以使用请求占位符cond是条件,使用在重写中解释的可能的值(也有可能包含if表达式)。

  • if_op 指定了连接多个if条件;默认值是and

保留路径

默认情况下,重定向从精确匹配的路径到你定义的精确路径。您可以在任何"to"参数中使用占位符来保存请求URL的路径或其他部分,如{uri}{path},只支持请求占位符

示例

  • 当收到来自/resources/images/photo.jpg的一个请求, 使用307状态码(临时重定向)重定向到/resources/images/drawing.jpg
redir /resources/images/photo.jpg /resources/images/drawing.jpg 307
  • 把所有请求冲向到https://newsite.com,并保留请求URI:
redir https://newsite.com{uri}
  • 定义一组除了最后一个外都使用307状态码的重定向:
redir 307 {
    /foo     /info/foo
    /todo    /notes
    /api-dev /api       meta
}
  • 只有请求协议是HTTP时才进行重定向:
redir 301 {
    if {>X-Forwarded-Proto} is http
    /  https://{host}{uri}
}