Wie kann ich robots.txt für alle meine eigenen Subdomains bereitstellen, aber nicht für andere Hosts auf Apache?

Wie kann ich robots.txt für alle meine eigenen Subdomains bereitstellen, aber nicht für andere Hosts auf Apache?

Wir entwickeln Websites und hosten die QA-Umgebung auf demselben Server wie die Produktionsumgebung. Ich möchte eine spezielle robots.txt-Datei für alle QA-Sites bereitstellen, aber nicht für die Produktionssites. Wir haben einevielvon Sites, daher möchte ich nicht Hunderte von Vhost-Konfigurationsblöcken aktualisieren. Die QA-Sites sind sowohl am Domänennamen als auch am Verzeichnis, in dem sie sich befinden, leicht zu identifizieren. QA- und Produktionssites sind in zwei verschiedenen Verzeichnissen gruppiert. Alle QA-Sites werden unter *.qa.mycompany.com gehostet.

Beispielproduktion: Host: example.org Docroot: /var/www/production/example.org

Beispiel QA: Host: example.qa.mycompany.com Docroot: /var/www/qa/example.org

Gibt es eine Möglichkeit, Apache so zu konfigurieren, dass eine robots.txt-Datei für alle QA-Sites, aber nicht für die Produktionssites bereitgestellt wird, ohne alle QA-Vhost-Konfigurationen aktualisieren zu müssen?

Antwort1

Sie könnten dies hinzufügen

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

Dann könnten Sie Ihre qa-robots.txt in einem öffentlichen Bereich auf einem globalen Host ablegen, der Verzeichnisblock sollte für alle /qa/-Ordner eine Weiterleitung dorthin bereitstellen.

Auch Suchmaschinen sollten dieser Weiterleitung folgen.

Anstelle der Umleitung können Sie auch hinzufügen

Fehlerdokument 404 "/var/www/qa_robots.txt"

Dies wird jedoch einen 404-Fehlercode senden. Ich bin mir nicht sicher, wie Suchbots darauf reagieren. Ich denke, es könnte auch eine Möglichkeit geben, dies mitmod_umschreibenund ein passendesRewriteCond

Antwort2

Sie können es tun mitmod_aliasundIf-Anweisung, fügen Sie dies zu Ihrer Serverkonfiguration hinzu:

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>

Die If-Anweisung ist nur unter Apache 2.4 verfügbar und Sie haben Ihre Frage als 2.2 und 2.4 gekennzeichnet. Daher wird Ihr Problem möglicherweise nicht gelöst, wenn Sie Apache 2.2 verwenden.

/Da Sie in der if-Anweisung nicht entkommen können , /werden ersetzt durchx2F

Ich habe es nicht getestet, aber theoretisch sollte es funktionieren.

verwandte Informationen