Мы решаем на уровне веб-сервера (nginx).
Добавляем во все конфиги наших сайтов примерно такой блок (отдельным включаемым файлом, конечно):
location /robots.txt {
set $disallow_indexing '';
if ($host ~ demo\.) {
set $disallow_indexing 'yes';
}
if ($disallow_indexing = 'yes') {
root /var/www/html;
}
if ($disallow_indexing != 'yes') {
proxy_pass $proxy_addr;
}
}
Содержимое /var/www/html/robots.txt:
User-agent: *
Disallow: /
Итого получается, что если запрашивается robots.txt с домена demo.site.ru, то ему отдается Disallow. Если же домен не содержит demo, то отдается тот robots.txt, который лежит в проекте.
Решение получается надежным и удобным т.к. не приходится помнить про каждый отдельный проект - все демо домены закрываются автоматически.