2012-12-27 122 views
2

在我lighttpd.conf:lighttpd url.rewrite-once + =(...)擦除早期規則?

$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

你有沒有嘗試過這樣的:

$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. matche不止一個,你的情況正則表達式。在這裏,只有一個可以匹配。