2011-09-28 2 views
0

Je dispose d'un fichier commeRewriteRule pour le même fichier qui est actuellement ciblé

www.domain.com/test.php 

Je veux écrire une règle que chaque fois que cela est appelé j'envoie un argument à ce dossier, mais je ne veux pas les montrer dans l'URL IE lorsque le chemin ci-dessus est dans le navigateur la règle réelle devrait être:

www.domain.com/test.php?state=yes 

Quelle devrait être la règle .htaccess pour cela? J'ai actuellement dans mon .htaccess

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC] 
RewriteRule ^test\.php$ /test.php?view=index [NC,L] 

Mais ce jette une erreur 500 serveur ???

Répondre

1

Je ne reçois pas une erreur 500, qu'est-ce que vous avez d'autre dans votre fichier .htaccess?

Voici ce que vous pouvez utiliser:

RewriteEngine on 
RewriteBase/
RewriteRule ^test\.php test.php?view=index [NC,L,QSA] 

Le drapeau QSA était absent:

Lorsque l'URI de remplacement contient une chaîne de requête, le comportement par défaut de RewriteRule est de rejeter la chaîne de requête existante, et remplacez-le par le nouveau. L'utilisation de l'indicateur [QSA] entraîne la combinaison des chaînes de requête.

Tenir compte de la règle suivante:

RewriteRule /pages/(.+) /page.php?page=$1 [QSA] 

Avec le [QSA] drapeau, une demande de /pages/123?one=two sera mis en correspondance avec /page.php?page=123&one=two. Sans le drapeau [QSA], cette même requête sera mappée à /page.php?page=123 - c'est-à-dire que la chaîne de requête existante sera rejetée.

source: http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa

Questions connexes