【问题标题】:lighttpd conditional rewritelighttpd 条件重写
【发布时间】:2023-05-20 06:22:01
【问题描述】:

最初我想在我的网址中添加尾随 / (lighttpd)

这是可能的

    url.redirect = ( "^(.*[^/])$" => "$1/" ) 

现在我需要排除一些扩展名,如 .txt、png 等。我想为除这些扩展名之外的所有内容添加斜杠,我似乎无法正常工作。

在 apache 中我可以使用条件重写,你将如何在 lighttpd 中做到这一点。

任何方向都将受到高度赞赏。

谢谢

【问题讨论】:

    标签: linux rewrite lighttpd


    【解决方案1】:

    只是为了让它一起工作(测试)

           $HTTP["url"] !~ "^(.*)(\..{3}|/)$" {
              url.redirect = (
    
               "^(.*[^/])$" => "$1/"
              )
            }
    

    @david 这将创建永无止境的循环.....

     "^(.*)\.(png|txt)$" => "$1.$2",
        "^(.*[^/])$" => "$1/"
    

    这将创建永久循环

    @Matthew 这行不通,因为您将所有内容都推送到 %1

    $HTTP["url"] !~ "^(.*)(\..{3}|/)$" {
      url.redirect = (
        ".*" => "%1/" 
      )
    }
    

    【讨论】:

    • 非常感谢 tike.. 成功了。也感谢大卫和马修。
    【解决方案2】:

    你可以有多个重定向规则:

    url.redirect = (
        "^(.*)\.(png|txt)$" => "$1.$2",
        "^(.*[^/])$" => "$1/"
    )
    

    在这种情况下,它将与文字 .png.txt 匹配所有内容,然后尝试您的原始规则。

    【讨论】:

    • 其实我正在寻找有条件的重写,所以它只有在不是 png 或 txt 时才会重写 ..
    • 这实际上是一个条件重定向。第一个匹配的规则是成功的规则;在这种情况下, png/txt 行被重写为自身,并发生重定向。如果这没有发生,它会尝试第二次重定向。请注意,这是完全重定向,而不是软重写。
    • 不会 "^(.*)\.(png|txt)$" => "$1.$2" 导致重定向循环或 lighttpd 会注意到并忽略吗?
    【解决方案3】:
    $HTTP["url"] !~ "^(.*)(\..{3}|/)$" {
      url.redirect = (
        ".*" => "%1/" 
      )
    }
    

    【讨论】: