在我的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.com
和bar.domain.com
。简单domain.com
也应该有用。
第一组重写规则将.../course/x
发送到.../course/index.php?w=x
。这些工作适用于domain.com
和www.domain.com
,但对于foo.domain.com
和bar.domain.com
,重写不起作用。我可以通过打开lighttpd的调试日志来看到重写没有发生。
如果我禁用第二个rewrite-once
规则块,只是为了阻止机器人抓取foo.domain.com
和bar.domain.com
,则第一组重写将适用于所有子域。
我非常确定url.rewrite-once += (...)
有效,因为我已经应用了一组较早的全局重写一次规则。
任何想法为什么最后一组只应用于foo和bar子域的重写一次规则会阻止先前的规则工作?
答案 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.
在您的案例中匹配多个正则表达式。在这里,只有一个可以匹配。