web-dev-qa-db-fra.com

Renvoie 410 code d'état disparu pour les URL contenant les mêmes caractères dans .htaccess

Mon site Web a été touché par l'attaque de spam pharma qui a créé des centaines d'URL, qui contiennent toutes les 5 derniers caractères -1234.pdf.

Pour que Google et les autres moteurs de recherche les suppriment plus rapidement, je voudrais retourner ces pages avec un code de statut 410/GONE, existe-t-il un moyen plus simple de le faire dans .htaccess autre que répertorier toutes les URL et définir RewriteRules pour chacune (un processus qui prendrait des heures!)

2
Sam

Pour servir un 410 Gone pour toutes les URL se terminant par la chaîne littérale -1234.pdf alors vous pouvez utiliser la directive mod_rewrite suivante en haut de votre .htaccess fichier:

RewriteEngine On

RewriteRule -1234\.pdf$ - [G]

Ou pour rejeter toute URL se terminant par -NNNN.pdfNNNN est un nombre d'au moins 4 chiffres, vous pouvez changer le modèle RewriteRule en quelque chose comme : -\d{4,}\.pdf$.

mais les URL renvoient toujours un 404.

Dans le cas où le serveur a défini un 410 ErrorDocument personnalisé et remplace le code de réponse HTTP, définissez ce qui suit en haut de votre .htaccess fichier (assurez-vous que vous n'avez pas défini vous-même un 410 ErrorDocument personnalisé plus tard dans le .htaccess fichier ou configuration du serveur):

ErrorDocument 410 default

PDATE: nous avons également d'autres URLs contenant du spam qui ont la chaîne "stmap_9874100.html" (où les trois derniers chiffres sont toujours différents), une requête similaire peut-elle être écrite pour définir ces URL à 410 aussi?

Oui, vous pouvez ajouter une autre directive similaire à celle précédente:

RewriteRule stmap_9874\d{3}\.html$ - [G]

Explication du modèle RewriteRule (expression régulière/expression régulière) et de la directive:

  • stmap_9874 - Ces caractères correspondent littéralement (n'importe où dans le chemin URL).

  • \d est une classe de caractères abrégée représentant n'importe quel chiffre (0-9) et \d{3} est exactement 3 d'entre eux.

  • \. correspond à un point littéral, sinon, un point dans l'expression régulière correspond à n'importe quel caractère (sauf les nouvelles lignes).

  • html - Ces caractères correspondent littéralement.

  • $ est une "ancre" qui représente la fin de la chaîne. Cette chaîne de caractères doit donc apparaître à la fin du chemin URL.

  • - (trait d'union) - ne fait pas partie de l'expression rationnelle, c'est le deuxième argument de la directive RewriteRule. Ceci est juste un "espace réservé" indiquant aucune substitution . L'URL n'est pas réécrite/redirigée vers autre chose.

  • L'indicateur G (abréviation de R=410) entraîne une réponse 410 Gone. (L'indicateur L n'est pas requis ici, car il est implicite lors de la spécification d'un code de réponse hors de la plage 3xx (et 2xx).)

1
MrWhite