mod_rewrite PHP $ _GET vide

J’ai le fichier .htaccess suivant:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule api/(.*)$ api.php?m=$1 [QSA,NC,L]  

La réécriture d’URL fonctionne très bien. Je peux aller à http://myserver.com/api/example et il se comportera comme si je suis allé à http://myserver.com/api.php?m=example . Le problème est que les variables PHP $ _REQUEST et $ _GET sont vides. Ne devrais-je pas toujours pouvoir obtenir la valeur de $ _REQUEST [‘m’]?

Après quelques recherches sur Google, j’ai trouvé une suggestion pour désactiver MultiViews. Si j’ajoute Options -MultiViews , j’obtiens une erreur 404.

Qu’est-ce que je fais mal? Je vous remercie.

On dirait que vous n’avez pas activé mod_rewrite. Comme il n’est pas activé, le conteneur IfModule est ignoré. Voir: Comment activer mod_rewrite pour Apache 2.2

Vous devez désactiver les Multiviews pour que cela fonctionne, sinon mod_negotiation est activé et mappera automatiquement /api/ vers /api.php sans donner à mod_rewrite la possibilité de faire quoi que ce soit. Donc, vous avez besoin de la ligne:

 Options -MultiViews 

Si vous ne pouvez pas activer mod_rewrite, vous pouvez aussi changer votre script api.php pour qu’il recherche la variable PATH_INFO:

 $_SERVER['PATH_INFO'] 

pour obtenir la partie “exemple”.