2009-03-01 6 views
1

J'ai réécrit mon application web en utilisant CakePHP, mais maintenant je dois rediriger mes anciennes urls formatées vers mon nouveau format d'URL. Je n'arrive pas à ajouter ma propre règle de réécriture de mod personnalisée. Je l'ai ajouté au-dessus de la règle principale de réécriture de cakephp, mais je reçois une boucle de redirection infinie. Je veux juste http://mysite.com/index.php?action=showstream&nickname=user pour rediriger vers http://mysite.com/user avant que la réécriture de cakephp n'arrive.Comment écrire un fichier mod_rewrite .htaccess personnalisé pour le routage CakePHP?

EDIT: Ok, maintenant, lorsque la condition est remplie, il redirige mais il ajoute la chaîne de requête d'origine à la fin. Je suppose que est dû au drapeau QSA dans CakePHP règles de réécriture, mais j'avais l'impression que dans ma règle « L » arrêterait que d'exécuter ...

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^action\=showstream&nickname\=(.*)$ 
RewriteRule ^.*$ http://mysite.com/%1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

+0

J'ai mis à jour mon message original. Toute aide serait grandement appréciée! – makeee

+0

Ajoutez une requête vide à la substitution comme dans mon exemple. – Gumbo

Répondre

1

Lorsque vous faites une capture à l'intérieur de la ligne RewriteCond au lieu de RewriteRule, vous devez référencer la capture avec% N au lieu de $ N. Cela est, votre ligne RewriteRule devrait être:

RewriteRule ^index.php$ /%1 [R=301,L] 
1

Essayez de tester la ligne de demande (THE_REQUEST) pour voir ce que l'URI a été initialement demandé:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /index\.php 
RewriteCond %{QUERY_STRING} ^action=showstream&nickname=([^&]*)$ 
RewriteRule ^index\.php$ /%1? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php?url=$0 [QSA,L] 

Mais peut-être qu'il serait plus facile de le faire avec PHP.