it-swarm.com.de

Robots.txt dynamisch generieren

Ich habe einen Unterordner WP installiert. Es werden mehrere Domains bedient, die mit demselben Ordner verknüpft sind. Die angeforderte Domain wird in wp-config.php (von der Variablen $ _SERVER) empfangen und zum Definieren von WP_SITEURL, WP_HOME und DOMAIN_CURRENT_SITE verwendet. So können wir dasselbe sowohl von domain.com als auch von domain.co.uk aus öffnen. Ich muss den Link zur XML-Sitemap zu robots.txt hinzufügen und er sollte natürlich je nach angeforderter Domain unterschiedlich sein.

Es gibt die native Funktion do_robots () WP, die robots.txt für mehrere Sites generiert und deren dynamische Änderung mithilfe der Aktion robots_txt aus der Datei functions.php des Themas oder einem Plugin ermöglicht. Bei einer Installation an einem einzelnen Standort scheint dies jedoch nicht der Fall zu sein.

Ich kann do_robots von Theme-Funktionen aus aufrufen, um den Inhalt zu generieren und in die robots.txt-Datei zu schreiben, bin mir aber nicht sicher, wo ich ihn einbinden soll.

Die Frage ist: Wie kann ich die robots.txt dynamisch generieren lassen oder habe die Möglichkeit, ihren Inhalt mit Hooks aus theme functions.php zu ändern?

3
Igor Skoldin

Ich habe gerade den 'robots_txt' Filter in einer einzelnen Installation getestet, um die Ausgabe der virtuellen /robots.txt zu ändern, die WordPress anzeigt, und es hat für mich gut funktioniert:

add_filter('robots_txt', 'wpse_248124_robots_txt', 10,  2);

function wpse_248124_robots_txt($output, $public) {

  return 'YOUR DESIRED OUTPUT';
}

Was passiert wirklich, wenn Sie versuchen, auf /robots.txt zuzugreifen? Zeigt es den Standardinhalt von robots.txt oder einen 404 an? Wenn Sie eine 404 erhalten, haben Sie möglicherweise Apache- oder Nginx-Regeln, die nicht zulassen, dass die /robots.txt-Anforderung PHP durchläuft. Es ist sehr üblich, in einer Nginx-Konfiguration so etwas zu haben:

# Don't log access to /robots.txt
location = /robots.txt {
    access_log    off;
    log_not_found off;
}

Sie sollten es durch etwas ersetzen:

# Don't log access to /robots.txt
location = /robots.txt {
    try_files     $uri $uri/ /index.php?$args;
    access_log    off;
    log_not_found off;
}

Sie sollten auch überprüfen, ob die internen WordPress-Umschreiberegeln ordnungsgemäß funktionieren, indem Sie den Rewrite Rules Inspector (oder eine andere verfügbare Methode) verwenden, um sicherzustellen, dass die folgende Umschreiberegel vorhanden ist:

robots\.txt$ index.php?robots=1

Wenn dies nicht der Fall ist, sollten Sie versuchen, Plugins zu deaktivieren, ein Standarddesign zu aktivieren und die Überschreibungsregeln zu leeren, um zu überprüfen, ob die Überschreibungsregel wieder angezeigt wird. Wenn Sie jedoch keine Zeit dafür haben, fügen Sie diese Überschreibungsregel zu Ihrem .htaccess hinzu:

RewriteRule robots\.txt$ index.php?robots=1
2