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”.