web-dev-qa-db-fra.com

Générer dynamiquement le fichier robots.txt

J'ai un sous-dossier WP installation. Il dessert plusieurs domaines liés au même dossier. Le domaine demandé est reçu dans wp-config.php (à partir de la variable $ _SERVER) et utilisé pour définir WP_SITEURL, WP_HOME et DOMAIN_CURRENT_SITE. Nous pouvons donc ouvrir les mêmes depuis domain.com que domain.co.uk. J'ai besoin d'ajouter le lien vers le sitemap XML vers robots.txt et, évidemment, il devrait être différent selon le domaine demandé.

Il y a la fonction native WP de do_robots () qui génère le fichier robots.txt pour le multisite et permet de le modifier dynamiquement à l'aide de son action robots_txt à partir du fichier functions.php du thème ou d'un plugin. Cependant, cela ne semble pas être le cas pour une installation sur un seul site.

Je peux appeler do_robots à partir de fonctions de thème pour générer le contenu et écrire dans le fichier robots.txt, mais je ne sais pas trop où je devrais l'accrocher.

La question qui se pose est la suivante: comment puis-je générer dynamiquement le fichier robots.txt ou avoir la possibilité de modifier son contenu à l'aide de points d'ancrage issus du thème functions.php?

3
Igor Skoldin

Je viens de tester le filtre 'robots_txt' sur une seule installation pour modifier la sortie du fichier virtuel /robots.txt affiché par WordPress et cela a bien fonctionné pour moi:

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

function wpse_248124_robots_txt($output, $public) {

  return 'YOUR DESIRED OUTPUT';
}

Qu'est-ce qui se passe réellement lorsque vous essayez d'atteindre /robots.txt? Affiche-t-il le contenu par défaut de robots.txt ou un 404? Si vous obtenez un 404, vous pouvez avoir des règles Apache ou Nginx qui n'autorisent pas la requête /robots.txt à passer par PHP. Il est très courant d'avoir quelque chose comme ça sur une configuration nginx:

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

Vous devriez le remplacer par quelque chose comme:

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

Vous devez également vérifier si les règles de réécriture internes de WordPress fonctionnent correctement à l’aide de Rewrite Rules Inspector (ou de toute autre méthode disponible) en vous assurant que la règle de réécriture suivante existe:

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

Si ce n'est pas le cas, vous devriez essayer de désactiver les plugins, activer un thème par défaut et vider les règles de réécriture pour vérifier si la règle de réécriture revient, mais si vous n'avez pas le temps, ajoutez simplement cette règle de réécriture à votre .htaccess:

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