lighttpd重写问题

时间:2011-11-15 17:43:48

标签: lighttpd url-rewriting

我想为所有域重写我的robots.txt,但主要的一个(我有域别名)。似乎我的规则相互冲突或互相覆盖 - 对于test.example.org域,所有images / css / js都不起作用 - 机器人会重写,但没有其他工作。请注意,我的网站使用单个index.php控制器。我不清楚如何改写这些规则。

url.rewrite-once = (
  "^(.*)\.[\d]{10}\.(css|js)$" => "$1.$2",   # Cache-busing js and css files
    "^/favicon\.(.*)" => "/images/favicon/favicon.ico",
    "^/css/.+" => "$0", # directories with static files
    "^/js/.+" => "$0",
    "^/htc/.+" => "$0",
    "^/favicon\.ico$" => "$0", # static file example
    "^/robots.txt" => "$0",
    "^/(.*)\.php(.*)" => "$0",
    "^/(.+)$" => "/index.php/$1"
)


$HTTP["host"] == "test.example.org" {
   # url.rewrite-repeat = ("^/robots\.txt$" => "altbots.txt")
}

编辑:澄清......我有2个域名 - example.org和test.example.org。它们是彼此的别名 - 即它们指向完全相同的站点。我希望在顶部定义的10个左右的规则适用于这两个域。但对于test.example.org,我想使用不同的机器人文件。我认为上述方法可行,但取消注释机器人的test.example.org行导致所有以前的10条规则不再起作用。这就是我不明白的原因 - 为什么要添加这一行:

url.rewrite-repeat = ("^/robots\.txt$" => "altbots.txt")

导致之前的css,js等规则不再适用?

1 个答案:

答案 0 :(得分:0)

要么在正则表达式中使用否定前瞻,要么使用选择器。

# Somewhere above declare the path to the robots.txt
var.robots = "/var/www/somewhere/robots.txt"
# The selector
$HTTP["url"] =~ "^/robots\.txt$" {
  alias.url                = ( "/robots.txt" => var.robots )
}

现在上面的重写应该没问题,因为它应该捕获/robots.txt ...但是,在您的特定情况下,您仍然必须确保此URI存在。这就是我的样本中的选择器...

当然,您也可以代替使用变量,而只需使用文字字符串。