J'ai deux URL spécifiques qui sont redirigées avec 301 redirect dans mon fichier .htaccess comme ci-dessous:
redirect 301 /old-url-1/ http://www.domain.com/new-url-3/
redirect 301 /old-url-2/ http://www.domain.com/new-url-3/
Maintenant le problème est avec la structure d'URL comme ceci:
http://www.domain.com/old-url-1/sub-url/
ou http://www.domain.com/old-url-2/sub-url/
qui n'arrive pas au chemin souhaité sur l'URL redirigée vers http://www.domain.com/old-url-1/sub-url/
.
Comment puis-je seulement faire correspondre la partie /old-url-1/
et rediriger dans ce cas, dans tous les autres cas, il suffit de suivre le chemin d'origine tel que/old-url-1/sub-url /?
** L'effet souhaité est le suivant: si quelqu'un accède à: http://www.domain.com/old-url-1/
redirige le visiteur vers http://www.domain.com/new-url-3/
, mais si quelqu'un accède à http://www.domain.com/old-url-1/sub-url/
, conserve le visiteur sur cette URL et ne redirige pas vers http://www.domain.com/new-url-3/sub-url
.
La clé pour rediriger uniquement la correspondance exacte d'URL est d'indiquer à redirectMatch de ne faire correspondre que l'URL, ce qui est facile à réaliser avec regex selon httpd.Apache.org , où la description indique:
Description: envoie une redirection externe basée sur une correspondance d'expression régulière de l'URL actuelle. Syntaxe: URL de regex [status] RedirectMatch
Dans mon cas,
redirect 301 /old-url-1/ http://www.domain.com/new-url-3/
Becames
RedirectMatch 301 ^/old-url-1/$ http://www.domain.com/new-url-3/
Où ^
correspond au début de l'URL et $
pour correspondre à la fin de l'URL.
Ainsi, ma règle correspondra uniquement old-url-1 , et pas old-url-1/sub-url ou un autre odl-url-1/un-sous-chemin .