¿Cómo servir robots.txt para todos mis propios subdominios pero no para otros hosts en Apache?

¿Cómo servir robots.txt para todos mis propios subdominios pero no para otros hosts en Apache?

Desarrollamos sitios web y alojamos el entorno de control de calidad en el mismo servidor que el entorno de producción. Quiero publicar un archivo robots.txt específico para todos los sitios de control de calidad, pero no para los sitios de producción. Tenemos unalotede sitios, por lo que no quiero actualizar muchos cientos de bloques de configuración de vhost. Los sitios de control de calidad se identifican fácilmente tanto por el nombre de dominio como por el directorio en el que se encuentran. Los sitios de control de calidad y de producción se agrupan en dos directorios diferentes. Todos los sitios de control de calidad están alojados en *.qa.mycompany.com.

Ejemplo de producción: host: ejemplo.org docroot: /var/www/production/example.org

Ejemplo de control de calidad: host: ejemplo.qa.miempresa.com docroot: /var/www/qa/example.org

¿Hay alguna forma de configurar Apache para que proporcione un archivo robots.txt para todos los sitios de control de calidad, pero no para los sitios de producción, sin tener que actualizar todas las configuraciones de vhost de control de calidad?

Respuesta1

Podrías agregar esto

<Directory "/var/www/qa/*">
  Redirect permanent robots.txt http://example.com/qa_robots.txt
</Directory>

En lugar de colocar su qa-robots.txt en un área pública en un host global, el bloque de directorio debería redirigir a él para todas las carpetas /qa/.

Los motores de búsqueda también deberían seguir esta redirección.

En lugar de redirección también puedes agregar

Documento de error 404 "/var/www/qa_robots.txt"

Pero esto enviará un código de error 404. No estoy seguro de cómo reaccionarán los robots de búsqueda ante esto. Creo que también podría haber una manera de hacer esto conmod_reescrituray una coincidenciaRewriteCond

Respuesta2

Puedes hacerlo conmod_alias&si declaración, agregue esto a la configuración de su servidor:

Alias /robots.txt /path/to/robots.txt
Alias /qa_robots.txt /path/to/robots.txt

<If "%{DOCUMENT_ROOT} =~ /(\x2Fvar\x2Fwww\x2Fqa\x2F)/">
RewriteRule ^robots\.txt$  qa_robots.txt
</If>

Si la declaración solo está disponible en Apache 2.4 y etiquetó su pregunta como 2.2 y 2.4... es posible que no resuelva su problema si está utilizando Apache 2.2.

Como no puede escapar /en la declaración if, /se reemplazan porx2F

No lo probé, pero en teoría debería funcionar.

información relacionada