2008-10-22 17 views
14

Tengo un poco de un servidor de transición en Internet público ejecutando copias del código de producción para algunos sitios web. Realmente no me gustaría si los sitios de ensayo se indexan.¿Puedo bloquear los rastreadores de búsqueda para cada sitio en un servidor web Apache?

¿Hay alguna manera de que pueda modificar mi httpd.conf en el servidor de ensayo para bloquear los rastreadores del motor de búsqueda?

Cambiar el archivo robots.txt no funcionaría realmente ya que utilizo scripts para copiar el mismo código base en ambos servidores. Además, preferiría no cambiar los archivos conf de host virtual, ya que hay un montón de sitios y no quiero tener que recordar copiar una determinada configuración si hago un sitio nuevo.

Respuesta

29

Crear un robot.archivo txt con los siguientes contenidos:

User-agent: * 
Disallow:/

Coloque ese archivo en algún lugar de su servidor de transición; su directorio raíz es un excelente lugar para ello (por ejemplo, /var/www/html/robots.txt).

Añadir lo siguiente a su archivo httpd.conf:

# Exclude all robots 
<Location "/robots.txt"> 
    SetHandler None 
</Location> 
Alias /robots.txt /path/to/robots.txt 

La directiva SetHandler probablemente no es necesario, pero podrían ser necesarios si está utilizando un controlador como mod_python, por ejemplo.

Ese archivo robots.txt ahora se servirá para todos los hosts virtuales en su servidor, anulando cualquier archivo robots.txt que pueda tener para hosts individuales.

(Nota: mi respuesta es esencialmente la misma que sugiere la respuesta de ceejayoz, pero tuve que dedicar unos minutos adicionales a descifrar todos los detalles para que funcione. Decidí poner esta respuesta aquí para por el bien de otros que puedan tropezar con esta pregunta.)

+0

me ahorró mucho tiempo. Thnx. – Khuram

+0

¿A qué se refiere el 'Alias'? Si tengo varios fantasmas, ¿debo crear un 'Alias' para cada uno? – nicoX

+0

@nicoX: No necesita crear un 'Alias' por cada vhost. El que crees aquí se aplicará a todos los vhosts que crees. – jsdalton

2

¿Podría alias robots.txt en el alojamiento virtualhosts a un robots.txt restrictivo alojado en una ubicación diferente?

1

Dependiendo de su escenario de implementación, debería buscar maneras de implementar diferentes archivos robots.txt en dev/stage/test/prod (o la combinación que tenga). Asumiendo que tiene diferentes archivos de configuración de base de datos o (o lo que sea análoga) en los distintos servidores, esto debe seguir un proceso similar (que hacer tienen diferentes contraseñas para las bases de datos, ¿verdad?)

Si usted no tiene una proceso de implementación en un solo paso, esta es probablemente una buena motivación para obtener uno ... hay muchísimas herramientas disponibles para diferentes entornos: Capistrano es bastante bueno, y está favorecido en el mundo de Rails/Django, pero no es así. significa el único.

A falta de todo eso, que probablemente se podría configurar una directiva Alias ​​global en su configuración de Apache que se aplicaría a todos los VirtualHosts y apuntan a un robots.txt restrictiva

2

Para detener realmente la indexación de páginas, se le necesidad de ocultar los sitios detrás de HTTP auth. Puede hacer esto en su configuración global de Apache y usar un archivo .htpasswd simple.

El único inconveniente de esto es que ahora debe ingresar un nombre de usuario/contraseña la primera vez que navega a cualquier página en el servidor de transferencia.

+0

Existe un problema con este enfoque, cuando desea exponer algunas API a diferentes servicios que no son compatibles con la autenticación HTTP. En este caso, deberá deshabilitarlo para ese host específico, lo que puede ocasionar un desastre a tiempo. –

4

Puede usar mod_rewrite de Apache para hacerlo. Supongamos que su host real es www.example.com y su host intermedio es de etapas.ejemplo.com. Cree un archivo llamado 'robots-staging.txt' y reescriba condicionalmente la solicitud para ir a eso.

Este ejemplo podría ser adecuado para proteger un único sitio de ensayo, un poco de un caso de uso más sencillo que lo que está pidiendo, pero esto ha funcionado de forma fiable para mí:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Dissuade web spiders from crawling the staging site 
    RewriteCond %{HTTP_HOST} ^staging\.example\.com$ 
    RewriteRule ^robots.txt$ robots-staging.txt [L] 
</IfModule> 

Se podría tratar de redirigir las arañas a un archivo robots.txt maestro en un servidor diferente, pero algunas de las arañas pueden resistirse después de obtener algo que no sea un código de retorno "200 OK" o "404 no encontrado" de la solicitud HTTP, y no pueden leer la URL redirigida

Así es como usted haría lo siguiente:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Redirect web spiders to a robots.txt file elsewhere (possibly unreliable) 
    RewriteRule ^robots.txt$ http://www.example.com/robots-staging.txt [R] 
</IfModule> 
Cuestiones relacionadas