2009-11-09 16 views
0

J'utilise .htaccess pour effectuer la redirection. Voici la ligneL'expression régulière avec RedirectMatch fait quoi que ce soit

RedirectMatch permanent .*\?langue=([\w]{2}).*id_([\w]+)=([1-9]+) ***[protocol]***://myserver/rootContext/action?pagename=dir1/dir2/dir3/Redirect&type=$2&id=$3&lang=$1 

Voici mon url inital:

***[protocol]***://localhost/adir/anotherDir/anotherDirAgian/oneMore/apage.php?langue=fr&id_dossier=261 

Cette expression régulière est correcte, mais au moins, aucune redirection est faite. Avec une expression régulière silmple et url simple, il fonctionne correctement.

Quelqu'un peut-il aider? Merci David Hoareau

Répondre

1

RedirectMatch fonctionne avec le 'chemin d'URL', qui n'inclut aucun paramètre de requête.

Vous pouvez faire correspondre à une chaîne de requête en utilisant un RewriteCond dans mod_rewrite. Bien que l'OMI soit une proposition douteuse essayant d'analyser les chaînes de requête avec regex. Tout paramètre inattendu ou commande pourrait casser votre regex. Étant donné que vous ne correspondez pas à un chemin particulier, cela peut également se produire si l'URL du nouveau système contenait ?langue=... dans la requête.

0

A côté de cela ce bobince déjà dit, essayez cette règle mod_rewrite:

RewriteEngine on 
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)langue=(\w{2}.*) 
RewriteCond %1lang=%3 ^(([^&]*&)*)id_([\w]+)=([1-9]+.*) 
RewriteRule .* $0?%1type=%3&id=%4 

L'URL de substitution doit être adaptée à vos besoins, mais la substitution de la requête doit être correcte.