2009-07-27 9 views
0

Je suis en train d'écrire ce code de réécriture et juste ne fonctionne pas (apache 2.2):ModRewrite et PHP émet

RewriteEngine on 
RewriteBase/

RewriteRule ^account/activate\?token=(.*) index.php?route=account/activate&token=$1 

J'ai essayé beaucoup de variations différentes. Après avoir essayé pour environ et heure et la recherche google je suis perplexe. C'est ici que vous entrez!

+1

Peut-être lancer une petite explication de ce que vous essayez de faire? Peut-être quelques exemples d'URI entrants et sortants, et quels paramètres vous souhaitez conserver? – AlexanderJohannesen

+0

Qu'est-ce qui ne fonctionne pas? Quel est le problème et qu'essayez-vous d'accomplir? – random

+0

Mod_rewrite fonctionne-t-il pour d'autres règles? –

Répondre

3

Essayez cette

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^account/activate$ index.php?route=account/activate&%1 

En gros, cela mappe toute la chaîne de requête à% 1 le RewriteRule et vous pouvez alors accéder à votre jeton à partir de votre php-script en utilisant bon vieux régulier $ _GET ['token']

+0

Cela a fonctionné merci! – mikelbring

0

Je l'ai utilisé ceci:

RewriteEngine On 

RewriteRule ^account/activate/?$ index.php?route=account/activate&%{QUERY_STRING} 
RewriteRule ^account/activate/?/$ index.php?route=account/activate&%{QUERY_STRING} 

Et il fonctionne avec ceci:

<?php 

echo "route is: " . $_GET['route']; 
echo "</br>"; 
echo "token is " . $_GET['token']; 

Mon répertoire dans lequel mon code réside dans est appelé test. Ce sont mes urls:

http://localhost:80/test/account/activate/?token=test
http://localhost:80/test/account/activate/?token=asd

+0

J'ai collé ce que vous avez eu, et cela n'a pas fonctionné. – mikelbring

+0

Ok, avez-vous essayé de remplacer votre .htaccess complet avec mes snippit. Si cela ne fonctionne pas, je pense que c'est une erreur de configuration. Peut-être que vous pourriez poster tout l'htaccess. – MrHus

+0

Il correspond parfaitement à la vôtre. La page arrive et le routeur var fonctionne mais le jeton est vide. – mikelbring

0

Vous ne pouvez pas correspondre à la partie des paramètres de votre URL avec mod_rewrite.

La seule façon de tester pour le paramètre dans votre URL est d'utiliser une directive RewriteCond et tester la variable QUERY_STRING env

2

Le modèle du RewriteRule directive est seulement testé sur le chemin d'URI. La chaîne de requête ne peut être testé avec le RewriteCond directive:

RewriteCond %{QUERY_STRING} ^token=(.*) 
RewriteRule ^account/activate$ index.php?route=account/activate&token=%1 

Mais il y a une solution plus simple: Il suffit de régler la QSA flag pour obtenir la chaîne de requête ajoutée automatiquement à la nouvelle chaîne de requête:

RewriteRule ^account/activate$ index.php?route=account/activate [QSA] 

Note: Vous avez juste besoin de définir l'indicateur QSA s'il y a une requête définie dans la substitution. Sinon, la requête d'origine sera déjà ajoutée automatiquement.