2010-10-03 2 views
1

Je voudrais rediriger une page php avec le paramètre facultatif se rapportant à une nouvelle URL proprehtaccess: réoriente à nouveau problème url

par exemple, de: account.php?id=156 à newurl/account/156

J'utilise le RedirectMatch suivant

RedirectMatch ^/cmstut/([a-zA-Z0-9_]+)[\.php]?[\?]?[a-zA-Z_]?[=]?([0-9]+)?$ /cmstut/redirect/newurl/$1/$2/$3 [L] 

mais le résultat est que je reçois, il va rediriger vers newurl/account//?id=156

Je pensais que c'était drôle quand je lire quelque part où htaccess et expression régulière a été comparé à vaudou :) nous allons maintenant comprendre pourquoi

Répondre

0

J'ai finalement trouvé la solution. Je l'ai fait quelques recherches et je une autre approche que je crois était encore mieux que ce que j'utilisais

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] 
RewriteRule ^([A-Za-z0-9]+)\.php$ /cmstut/redirect/newurl/account/%1? [R=302,L] 
2

Je ne comprends pas où est votre troisième sous-expression.

$ 1: ([a-zA-Z0-9_]+)
$ 2: ([0-9]+)
$ 3: MIA

Que je recommande quelque chose comme ça? Ensuite, vous devrez peut-être utiliser 3 $ pour accéder au numéro d'identification. vous voulez que le paramètre entier soit facultatif, non?

+0

qui est parce que je l'ai changé beaucoup que j'ai oublié de retirer le 3 $ et tout ce qui suit .php devrait être optionnel – Christophe

+0

redirige toujours vers newurl/account /? id = 156 – Christophe

+0

J'ai trouvé la solution, merci d'aider – Christophe

1

Je ne ai jamais utilisé URL réoriente dans .htaccess avant, mais si elle est des expressions régulières simples, cela devrait fonctionner:

RedirectMatch ^/cmstut/([a-zA-Z0-9_]+)\.php(\?[a-zA-Z_]+=([0-9]+))?$ /cmstut/redirect/newurl/$1/$3 [L] 

Puisque vous étiez pas très précis dans ce que vous voulez, j'ai pris quelques suppositions. Cela redirigera foo.php?bar=123 vers newurl/foo/123 et ignorera bar.


Edit: En y repensant, la réécriture de votre regexp pour vous ne vous aidera pas à long terme, et nul autre que vous est susceptible de savoir exactement ce que vous voulez. Je pense qu'un meilleur plan d'action vous indique un guide d'expression rationnelle. Here en est un, et il est spécifiquement destiné à mod_rewrite.

+0

est-ce que le vôtre fonctionnerait à la condition qu'il n'y ait pas de paramètre? (en particulier avec ce signe = ...) – beta0x64

+0

@ 0x90: Vous avez raison. Je l'ai édité pour être facultatif. – imgx64

+0

Pas spécifique dans ce que je voulais? J'ai spécifié que je voulais rediriger d'une url à l'autre en montrant le résultat que je voulais et j'ai aussi spécifié le résultat que j'ai obtenu ce qui n'est pas ce que je voulais. de toute façon j'ai encore le problème, il redirige vers newurl/account /? id = 156 (je travaille sur mon localhost) – Christophe