web-dev-qa-db-fra.com

Rediriger tous les liens de recherche contenant - vers + sur Wordpress

J'ai supprimé tous mes tags wordpress via phpmyadmin et la plupart de mes messages le contenu contient des liens de tag , maintenant je redirige tous les liens de tag vers recherche en utilisant .htaccess,

C'EST À DIRE

example.com/tag/stack-exchange/ sera redirigé vers example.com/search/stack-exchange/

Cela a bien fonctionné sur certains liens, mais je remarque que certains liens ne tirent pas du titre du message en raison du signe - sur l'URL du lien de recherche. Si je remplace le - par +, il trouvera le contenu de mon message (titre), mais si c’est - signe sur l’URL du lien, le contenu de mon message n’est pas retiré lors de la recherche.

S'il vous plaît, je ne peux en aucun cas rediriger toutes les URL de recherche contenant - sur l'URL du lien vers +.

Je redirige example.com/search/stack-exchange/ vers example.com/search/stack+exchange/

.htaccess est préférable.

1
Godwin Alex Ogbonda

Vous pouvez utiliser l'une des méthodes suivantes en haut de votre fichier .htaccess pour remplacer tous les - par + qui se produisent après le segment de chemin /search/ dans l'URL demandée:

RewriteRule ^(search/[^-]*)-([^-]*-.*) /$1+$2 [N]
RewriteRule ^(search/[^-]*)-([^-]*)$ /$1+$2 [R=302,L]

La première boucle RewriteRule (en interne) jusqu'à ce que tous les caractères sauf un trait d'union aient été remplacés par +. La seconde RewriteRule déclenche une redirection externe, remplaçant le dernier trait d'union. Dans votre exemple, où il n'y a qu'un trait d'union, la redirection se produira immédiatement.

Modifiez la redirection 302 (temporaire) en 301 (permanente) - si telle est l'intention - uniquement après avoir testé son efficacité.

UPDATE: Si vous rencontrez un problème avec une boucle de réécriture (et par conséquent, aucune redirection) lorsqu'il existe plusieurs traits d'union (-) dans l'URL demandée, alors vous avez probablement avoir un problème avec PATH_INFO ajouté à l'URL cible à chaque itération de la boucle. Ce problème peut être résolu à l'aide de l'indicateur DPI (informations sur le chemin d'annulation) sur la première directive RewriteRule. Par exemple:

RewriteRule ^(search/[^-]*)-([^-]*-.*) $1+$2 [N,DPI]
RewriteRule ^(search/[^-]*)-([^-]*)$ /$1+$2 [R=302,L]

Le préfixe de la barre oblique sur la première substitution RewriteRule n'est alors pas requis.

1
MrWhite