So erstellen Sie eine robots.txt-Datei für alle Domänen auf dem Apache-Server

10

Wir haben einen XAMPP Apache-Entwicklungswebserver mit virtuellen Hosts eingerichtet und möchten verhindern, dass Serps alle unsere Websites crawlen. Dies ist mit einer robots.txt-Datei einfach möglich. Wir möchten jedoch nicht in jedem vhost eine unzulässige robots.txt einfügen und müssen sie dann entfernen, wenn wir die Site auf einem anderen Server live geschaltet haben.

Gibt es eine Möglichkeit mit einer Apache-Konfigurationsdatei, alle Anforderungen an robots.txt auf allen vhosts in eine einzelne robots.txt-Datei umzuschreiben?

Wenn ja, können Sie mir ein Beispiel geben? Ich denke, es wäre ungefähr so:

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

Vielen Dank!

Michael Berkompas
quelle
robots.txt ist nicht obligatorisch und wird von einigen Crawlern ignoriert. Es sollte nicht als Sicherheitsmerkmal angesehen werden. Wenn Sie Ihre Site ausblenden möchten, bis sie für die Öffentlichkeit bereit ist, fügen Sie die Authentifizierung hinzu.
Mircea Vutcovici

Antworten:

25

Apache mod_alias wurde dafür entwickelt und ist im Apache-Kernsystem verfügbar. Im Gegensatz zu mod_rewrite kann Apache fast ohne Verarbeitungsaufwand an einem Ort festgelegt werden.

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

Mit dieser Zeile in der Datei apache2.conf gibt http://example.com/robots.txt - außerhalb aller vhosts - auf jeder Website, die sie bedient, die angegebene Datei aus.

Alister Bulman
quelle
Dies. Setzen Sie ein Aliasin jeden <VirtualHost>Block. +1.
Steven Montag
Vielen Dank! Das hat perfekt funktioniert. Ich wusste, dass es eine einfache Lösung gibt ...
Michael Berkompas
Wenn Sie es auf jedem einzelnen virtuellen Host möchten, müssen Sie es nicht in alle einfügen. Es kann auf globaler Ebene ausgeführt werden, wie dies der standardmäßige / manuelle Alias ​​standardmäßig tut.
Alister Bulman
Vielen Dank für die Lösung, obwohl mir C: / im Magen krank wird, weil ich weiß, dass es da draußen einen anderen Windows-Server gibt :) Ich habe meine Bearbeitung in meiner Datei modules.conf oder in mods-enabled / alias.conf wie folgt abgelegt: Alias /robots.txt /var/www/robots.txt
verbunden
1
Um sicherzustellen, dass diese Datei auch dann verfügbar ist, wenn andere Zugriffskontrollen sie blockieren, setzen Sie den Alias ​​und <Location "/robots.txt"> Allow from all </Location>unmittelbar danach in die Hauptdatei<IfModule alias_module>
Walf
1

Platzieren Sie Ihre gemeinsame globale robots.txtDatei irgendwo im Dateisystem Ihres Servers, auf das der Apache-Prozess zugreifen kann. Zur Veranschaulichung gehe ich davon aus, dass es bei ist /srv/robots.txt.

Dann einzurichten , mod_rewritediese Datei zu Kunden zu dienen , die es wünschen, setzen Sie die folgenden Regeln in jedem der vhost <VirtualHost>Konfigurationsblock:

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

Wenn Sie die Umschreiberegeln in verzeichnisbezogene .htaccessDateien anstatt in <VirtualHost>Blöcke einfügen, müssen Sie die Regeln geringfügig ändern:

RewriteEngine on
RewriteBase /
RewriteRule ^robots.txt$ /srv/robots.txt [NC, L]
Steven Montag
quelle
Könnten Sie dies erklären? "Legen Sie Ihre gemeinsame globale robots.txt-Datei irgendwo im Dateisystem Ihres Servers ab, auf das der Apache-Prozess zugreifen kann. Zur Veranschaulichung gehe ich davon aus, dass sie sich unter /srv/robots.txt befindet." ausführlicher? Ich muss wissen, was Sie damit meinen, ein Verzeichnis zu erstellen, das dem Apache-Prozess zur Verfügung steht.
Michael Berkompas
Jede Site befindet sich in einem Ordner wie testsite.int.devcsd.com unter C: \ xampp \ vhosts
Michael Berkompas
@ Michael: Kümmere dich nicht um diesen übermäßig komplizierten mod_rewriteHack. Verwenden Sie Aliasstattdessen, wie von Alister vorgeschlagen.
Steven Montag
0

Sie sind sich nicht sicher, ob Sie XAMPP unter Linux ausführen oder nicht, aber wenn ja, können Sie einen Symlink von allen virtuellen Hosts zu derselben robots.txt-Datei erstellen. Sie müssen jedoch sicherstellen, dass Ihre Apache-Konfiguration für jeden virtuellen Host korrekt ist darf symlinks folgen (unter der <Directory>richtlinie Options FollowSymLinks).

Soßengesicht
quelle
Ich möchte lieber nicht jede einzelne vhost-Deklaration bearbeiten müssen. Es gibt über 30 ... Außerdem möchte ich, dass es sich um eine automatische Überfahrt handelt, damit ich beim Erstellen eines neuen vhost nichts tun muss.
Michael Berkompas
Michael, benutze einfach sed, um eine Massenbearbeitung durchzuführen, ziemlich einfaches Zeug, du musst es definitiv nicht manuell machen. Hier unten wird erläutert
verbunden
0

Unterschiedlicher Lösungsansatz.

Ich hoste mehrere (mehr als 300) virtuelle Hosts in meiner Clusterumgebung. Um meine Server vor dem Hämmern durch Crawler zu schützen, definiere ich eine Crawl-Verzögerung von 10 Sekunden.

Ich kann jedoch nicht alle meine Clients mit einer festen robots.txt-Konfiguration erzwingen. Ich überlasse es meinen Kunden, ihre eigene robots.txt zu verwenden, wenn sie dies möchten.

Das Rewrite-Modul prüft zunächst, ob die Datei vorhanden ist. Wenn es nicht vorhanden ist, werden die Module in meine Standardkonfiguration umgeschrieben. Codebeispiel unten ...

Um das interne Umschreiben beizubehalten, sollte ein Alias ​​verwendet werden. Anstatt einen neuen Alias ​​zu definieren, der einige benutzerseitige Konflikte verursachen kann, habe ich meine robots.txt im Ordner / APACHE / error / gefunden, der bereits einen Alias ​​als Standardkonfiguration hat.

<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
quelle