J'ai supprimé un système de forum de mon CMS et je souhaite maintenant renvoyer un code d'état 410 à chaque fois qu'un moteur de recherche visite les anciens messages. Je sais que je dois utiliser un certain nombre de règles de réécriture pour faire le travail, mais je ne peux pas les faire fonctionner.
Les URL de base du forum que j'ai supprimées sont les suivantes:
Messages -> mywebsite.com/forum-viewtopic-p-xxx.html
Sujets -> mywebsite.com/forum-viewtopic-t-xxx.html
Sous-forums -> mywebsite.com/forum-viewforum-f-xxx.html
En prenant cela en compte, voici quelques exemples du code que j'ai ajouté à mon .htaccess:
RewriteCond %{QUERY_STRING} forum-viewtopic
RewriteRule .* - [G]
RewriteCond %{QUERY_STRING} forum-viewforum
RewriteRule .* - [G]
Je ne sais pas si je me trompe, mais les en-têtes HTTP de ces messages de forum affichent un message '404 Not Found' au lieu d'une erreur 410.
Selon les exemples d'URL que vous avez fournis, il est judicieux d'utiliser ces lignes en haut de votre fichier .htaccess dans le dossier racine du document (où se trouve normalement index.html):
RewriteEngine On
RewriteRule ^forum-view(.*)$ - [NC,R=410,L]
Ainsi, tous les liens commençant par forum-view, que le mot soit majuscule ou minuscule ou un mélange de casse, seront redirigés vers le statut disparu (c'est ce que R = 410 signifie). De plus, L est inclus pour indiquer que le traitement de la règle se termine là s'il existe une correspondance pour empêcher que d'autres règles ne gâchent par la suite. Le *. Signifie un ou plusieurs caractères et je l’insère entre parenthèses pour plus de simplicité.
%{QUERY_STRING}
renvoie à tout ce qui suit le ?
de l'URL. Votre URL n'a pas de point d'interrogation, elle ne lui correspond donc pas.
Vous voulez simplement vous assurer que l'URL contient forum-viewtopic
ou forum-viewforum
pour renvoyer 410 l'état parti. Cette seule règle devrait le faire:
RewriteRule forum-viewtopic|forum-viewforum - [G]
Une autre option qui serait encore plus simple:
RewriteRule forum-view - [G]
Ou peut-être voulez-vous qu'il dise "tout ce qui commence par 'forum'":
RewriteRule ^forum - [G]
Vous pouvez également utiliser la directive RedirectMatch de mod_alias plutôt que mod_rewrite:
RedirectMatch gone /forum.*