我想为所有域重写我的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等规则不再适用?
答案 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存在。这就是我的样本中的选择器...
当然,您也可以代替使用变量,而只需使用文字字符串。