web-dev-qa-db-fra.com

Comment rediriger la racine d'un répertoire dans .htaccess sans rediriger également tout le contenu?

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.

1
Alan Kis

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/

^ 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 .

2
Alan Kis