Cómo crear un archivo robots.txt para todos los dominios en el servidor Apache

10

Tenemos una configuración de servidor web de desarrollo Apache XAMPP con hosts virtuales y queremos evitar que los serps rastreen todos nuestros sitios. Esto se hace fácilmente con un archivo robots.txt. Sin embargo, preferimos no incluir un archivo robots.txt de rechazo en cada vhost y luego tener que eliminarlo cuando se active el sitio en otro servidor.

¿Hay alguna manera con un archivo de configuración de apache para reescribir todas las solicitudes a robots.txt en todos los vhosts en un solo archivo robots.txt?

Si es así, ¿podrías darme un ejemplo? Creo que sería algo como esto:

RewriteEngine On
RewriteRule  .*robots\.txt$         C:\xampp\vhosts\override-robots.txt [L] 

¡Gracias!

Michael Berkompas
fuente
robots.txt no es obligatorio y algunos rastreadores lo ignorarán. No debe verse como una característica de seguridad. Si desea ocultar su sitio hasta que esté listo para el público, agregue autenticación.
Mircea Vutcovici

Respuestas:

25

Apache mod_alias está diseñado para esto y está disponible desde el núcleo del sistema Apache, y se puede configurar en un lugar sin casi sobrecarga de procesamiento, a diferencia de mod_rewrite.

Alias /robots.txt C:/xampp/vhosts/override-robots.txt

Con esa línea en el archivo apache2.conf, fuera de todos los vhost, http://example.com/robots.txt , en cualquier sitio web al que sirve, generará el archivo dado.

Alister Bulman
fuente
Esta. Pon un Aliasen cada <VirtualHost>bloque. +1.
Steven lunes
¡Gracias! Eso funcionó perfectamente. Sabía que había una solución fácil ...
Michael Berkompas
Si lo desea en cada host virtual, no necesita ponerlo en todos ellos. Puede ir a nivel global, como lo hace el alias predeterminado / manual de fábrica.
Alister Bulman
Gracias por la solución, aunque ver C: / allí me enferma el estómago sabiendo que hay otro servidor de Windows por ahí :) Pongo mi edición en mi archivo modules.conf o en mods-enabled / alias.conf así: Alias /robots.txt /var/www/robots.txt
conectado el
1
Para asegurarse de que este archivo esté disponible incluso cuando otros controles de acceso lo bloqueen, coloque el alias e <Location "/robots.txt"> Allow from all </Location>inmediatamente después, dentro del archivo principal<IfModule alias_module>
Walf
1

Coloque su robots.txtarchivo global común en algún lugar del sistema de archivos de su servidor que sea accesible para el proceso de apache. Por el bien de la ilustración, supondré que está en /srv/robots.txt.

Luego, para configurar el mod_rewriteservicio de ese archivo a los clientes que lo soliciten, coloque las siguientes reglas en el <VirtualHost>bloque de configuración de cada vhost :

RewriteEngine on
RewriteRule ^/robots.txt$ /srv/robots.txt [NC, L]

Si coloca las reglas de reescritura en .htaccessarchivos por directorio en lugar de <VirtualHost>bloques, deberá modificar las reglas ligeramente:

RewriteEngine on
RewriteBase /
RewriteRule ^robots.txt$ /srv/robots.txt [NC, L]
Steven Monday
fuente
¿Podría explicar esto? "Coloque su archivo robots.txt global común en algún lugar del sistema de archivos de su servidor que sea accesible para el proceso de apache. En aras de la ilustración, supondré que está en /srv/robots.txt". ¿con más detalle? ¿Necesito saber a qué te refieres al crear un directorio disponible para el proceso de apache?
Michael Berkompas
Cada sitio está contenido en una carpeta como testsite.int.devcsd.com en C: \ xampp \ vhosts
Michael Berkompas
@Michael: No te molestes con este mod_rewritetruco demasiado complicado . Utilice en su Aliaslugar, como lo sugiere Alister.
Steven lunes
0

No estoy seguro de si está ejecutando XAMPP en Linux o no, pero si lo está, podría crear un enlace simbólico de todos los hosts virtuales al mismo archivo robots.txt, pero debe asegurarse de que su configuración de Apache para cada host virtual sea permitido seguir enlaces simbólicos (bajo las <Directory>directivas Options FollowSymLinks).

salsa
fuente
Prefiero no tener que editar cada declaración de vhost. Hay más de 30 ... Además, quiero que sea una anulación automática para que no tenga que hacer nada al crear un nuevo vhost.
Michael Berkompas
Michael, solo usa sed para hacer una edición masiva, cosas bastante fáciles, definitivamente no necesitas hacerlo manualmente. Expuso cómo hacerlo aquí en la parte inferior: blog.netflowdevelopments.com/2012/10/11/…
conectado el
0

Enfoque diferente a la solución.

Alojo múltiples host virtuales (más de 300) en mi entorno de clúster. Para proteger a mis servidores de ser golpeados por rastreadores, defino Crawl-delay por 10 segundos.

Sin embargo, no puedo hacer cumplir a todos mis clientes con una configuración fija de robots.txt. Dejo que mis clientes usen su propio archivo robots.txt si lo desean.

El módulo de reescritura primero verifica si el archivo existe. Si no existe, los módulos se reescriben a mi configuración predeterminada. Ejemplo de código a continuación ...

Para mantener la reescritura interna, se debe usar un alias. En lugar de definir un nuevo alias que pueda causar algunos conflictos del lado del usuario, ubiqué mi robots.txt dentro de la carpeta / APACHE / error / que ya tiene un alias como configuración predeterminada.

<Directory /HOSTING/*/*/public_html>
        Options SymLinksIfOwnerMatch
        <Files robots.txt>
                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} -f [OR]
                RewriteCond %{REQUEST_FILENAME} -d
                RewriteRule (.*) - [L]
                RewriteRule (.*) /error/robots.txt [L]
        </Files>
</Directory>
aesnak
fuente