web-dev-qa-db-fra.com

Pourquoi l'en-tête définit-il X-Robots-Tag s'appliquent à toutes les pages?

Les directives ci-dessous sont destinées à appliquer l'en-tête X-Robots-Tag _ noindex et nofollow à une seule page.

Les directives ci-dessous sont appliquées avant le WordPress Block, mais il semble aboutir à toutes les pages étant définies avec noindex et nofollow

RewriteCond %{REQUEST_URI} ^(.*)?faq?(/)$ [NC]
RewriteRule ^faq - [E=NOINDEXNOFOLLOW]
Header set X-Robots-Tag "noindex, nofollow" E=NOINDEXNOFOLLOW

Le drapeau E est utilisé pour LIPETSEED par opposition à ENV pour Apache.

2
Motivated

Le drapeau E est utilisé pour LIPETSEEE plutôt que par opposition à ENV pour Apache.

D'où avez-vous obtenu cela? Les LITESPEED DOCS semblent montrer que LIPETSEEEEEEE est identique à Apache à cet égard et nécessitent env=, ne pas E=, sur la directive Header afin de définir conditionnellement l'en-tête de réponse HTTP en fonction de la présence d'une variable d'environnement.

Ayant testé cela moi-même sur un serveur LIPETSEED, je peux confirmer que cela semble être le cas. Et cela semblerait être le problème de votre directive ci-dessus. En utilisant E= semble résulter de l'en-tête défini inconditionnellement , qui semble être ce que vous voyez. (Comment Espeed interprète réellement E=<var> n'est pas clair - il peut simplement "ignorer" ça !? Dans mon expérience, LiteSpeed ​​semble simplement "ignorer" directives/syntaxe qu'il ne comprend pas - aucune erreur n'est générée, ce qui fait du débogage gênant!)

Mis à côté: sur Apache Vous auriez également des problèmes avec la manière dont les variables d'environnement sont renommées lorsque le processus de réécriture commence sur - après WordPress = réécrire la demande à index.php. Par exemple, sur Apache, vous devez tester pour REDIRECT_NOINDEXNOFOLLOW, par opposition à NOINDEXNOFOLLOW. Cependant, cela ne semble pas être le cas avec LIVESEED.

RewriteCond %{REQUEST_URI} ^(.*)?faq?(/)$ [NC]
RewriteRule ^faq - [E=NOINDEXNOFOLLOW]

Mis à côté: votre RewriteCond semble être inutile (et trop complexe). Et le RewriteCond ( condition ) et RewriteRule directives conflit Dans une certaine mesure ... vous avez fait le casse-insensible RewriteCond, cependant, le RewriteRule n'est pas, donc tandis que le Condition correspondrait à FaQ, le RewriteRule ne correspond que faq (tous minuscules). Le RewriteCond correspond à fa (car la fuite q est facultative), cependant, le RewriteRule correspond uniquement faq (depuis la fuite q n'est pas facultatif ici).

Donc, ce qui précède pourrait être écrit comme une directive unique:

RewriteRule ^faq/$ - [E=NOINDEXNOFOLLOW]

NB: Notez que lors de la définition d'une variable d'environnement avec mod_rewrite, sans valeur indiquée, elle est définie sur un vide . (Ceci est différent de mod_env et mod_setenvif qui définirait la variable sur 1.) Comme cela se produit, cela ne pose aucun problème à la directive Header.

Toutefois, si vous définissez simplement un VaR env Var en fonction de l'URL demandée, j'utiliserais SetEnvIf (mod_setenvif) au lieu de mod_rewrite. Par exemple:

SetEnvIf Request_URI ^/faq/$ NOINDEXNOFOLLOW

Notez que cela définit la variable à 1, au lieu d'une chaîne vide.

Résumé

Vous devez utiliser ce qui suit sur LIVESEED à la place:

SetEnvIf Request_URI ^/faq/$ NOINDEXNOFOLLOW
Header set X-Robots-Tag "noindex, nofollow" env=NOINDEXNOFOLLOW

Sur Apache, vous devez modifier la directive Header pour tester le REDIRECT_NOINDEXNOFOLLOW au lieu (comme mentionné ci-dessus). Par exemple:

SetEnvIf Request_URI ^/faq/$ NOINDEXNOFOLLOW
Header set X-Robots-Tag "noindex, nofollow" env=REDIRECT_NOINDEXNOFOLLOW
2
MrWhite