2009-05-14 5 views
0

L'adresse suivante fonctionne bien:Zend/Apache mod_rewrite ... qu'est-ce qui ne va pas?

http://localhost/index/index/ 

Cependant, je ne peux pas _GET variables $ quand ils viennent comme ceci:

http://localhost/index/index/test/1234/test2/4321

-mais-

Je peux cependant , _get $ les variables de ces façons:

http://localhost/index.php?test=1234&test2=4321 
http://localhost/index?test=1234&test2=4321 
http://localhost/index/index?test=1234&test2=4321 

Pourquoi les variables n'apparaissent-elles pas pour moi lorsque j'utilise la méthode/index/index/var/val?

Ci-dessous vous trouverez mon fichier .htaccess.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

Répondre

3

Zend Framework ne fait pas de données dans le uri de demande disponible en _GET variables $, pour y accéder, utilisez la clé dans un contrôleur :

$test = $this->getRequest()->getParam('test') //$test = 1234 

ou moins

$test = $this->_getParam('test'); 
+0

Ceci est la réponse ... Je suppose que je suis sorti de la bande, comme j'utilisais _GET $ avec le Zend_Filter_Input. – MichaelICE

0

Parce que $_GET contient les variables dans la chaîne de requête - qui est la partie de l'URL après le point d'interrogation. Notez que les règles de réécriture dans votre fichier .htaccess transforment toutes les URL qui ne se réfèrent pas aux fichiers ou répertoires existants en seulement index.php, sans aucune trace de l'URL d'origine (bien que, comme le commentaire de Gumbo me l'a rappelé, il est toujours accessible via $_SERVER['REQUEST_URI']. RewriteRule s ne créent pas une chaîne de requête (ils ne mettent pas un point d'interrogation dans l'URL), ce qui est ce que vous devez faire pour utiliser $_GET.

Je suggère de remplacer votre dernière RewriteRule avec quelque chose comme

RewriteRule ^.*$ index.php$0 [NC,L] 

Cela $0 ajoutera l'URL d'origine à index.php - par exemple, http://localhost/index/index/test/1234/test2/4321 deviendra http://localhost/index.php/index/index/test/1234/test2/4321 Ensuite, la requête sera traitée par index.php et la variable $_SERVER['PATH_INFO'] sera définie sur l'URL d'origine, /index/index/test/1234/test2/4321. Vous pouvez écrire du code PHP pour l'analyser et choisir les paramètres que vous voulez.

Si vous ne voulez pas le /index/index au début à enregistrer dans la variable path_info, vous pouvez utiliser un RewriteRule comme ceci:

RewriteRule ^/index/index(.*)$ index.php$1 [NC,L] 

ou

RewriteRule ^(/index)*(.*)$ index.php$2 [NC,L] 

à dépouiller n'importe quel numéro de /index es.

EDIT: En fait, vous pouvez garder votre existant RewriteRule s et il suffit de regarder $_SERVER['REQUEST_URI'] pour obtenir l'URI demande initiale; pas de déconner avec l'information de chemin est nécessaire. Ensuite, vous pouvez diviser cela comme vous le souhaitez en PHP.

+0

si que devrais-je faire pour convertir le reste de la chaîne de requête pour utiliser des barres obliques au lieu de? et & s? – MichaelICE

+0

Le chemin et la requête de l'URL d'origine demandés ne sont pas perdus (voir $ _SERVER ['REQUEST_URI']). – Gumbo

+0

@Gumbo: bon point, j'ai complètement oublié que –