lighttpd url.rewrite-once + =(...)删除先前的规则?

时间:2012-12-27 00:06:25

标签: mod-rewrite lighttpd

在我的lighttpd.conf中:

$HTTP["host"] =~ "^(www\.|foo\.|bar\.)?domain\.com$" {
    url.rewrite-once += (
        "^/favicon.ico$"        => "/images/favicon_cd.ico",
        "^/course/?$"           => "/course/index.php",
        "^/course/([^./]+)$"    => "/course/index.php?w=$1"
    )   
}
...
# don't allow spiders to crawl subdomains
$HTTP["host"] =~ "^(foo\.|bar\.)?domain\.com$" {
   url.rewrite-once += (
       "^/robots.txt$"          => "/robots_nocrawl.txt"
   )
}

我们为特定客户提供www.domain.com以及foo.domain.combar.domain.com。简单domain.com也应该有用。

第一组重写规则将.../course/x发送到.../course/index.php?w=x。这些工作适用于domain.comwww.domain.com,但对于foo.domain.combar.domain.com,重写不起作用。我可以通过打开lighttpd的调试日志来看到重写没有发生。

如果我禁用第二个rewrite-once规则块,只是为了阻止机器人抓取foo.domain.combar.domain.com,则第一组重写将适用于所有子域。

我非常确定url.rewrite-once += (...)有效,因为我已经应用了一组较早的全局重写一次规则。

任何想法为什么最后一组只应用于foo和bar子域的重写一次规则会阻止先前的规则工作?

1 个答案:

答案 0 :(得分:1)

你有没有试过像:

$HTTP["host"] =~ "^(www\.)?domain\.com$" {
    url.rewrite-once += (
        "^/favicon.ico$"        => "/images/favicon_cd.ico",
        "^/course/?$"           => "/course/index.php",
        "^/course/([^./]+)$"    => "/course/index.php?w=$1"
    )   
}

# don't allow spiders to crawl subdomains
$HTTP["host"] =~ "^(foo\.|bar\.)?domain\.com$" {
   url.rewrite-once += (
        "^/favicon.ico$"        => "/images/favicon_cd.ico",
        "^/course/?$"           => "/course/index.php",
        "^/course/([^./]+)$"    => "/course/index.php?w=$1",
        "^/robots.txt$"         => "/robots_nocrawl.txt"
   )
}

我不认为Lighttpd对同一场比赛有多重规则,我的意思是foo.& bar.在您的案例中匹配多个正则表达式。在这里,只有一个可以匹配。