Réécrivez toutes les requêtes pour ne pas avoir besoin de l'extension .php en utilisant un mod_rewrite RewriteRule

StackOverflow https://stackoverflow.com/questions/183921

Question

Je voudrais toutes les requêtes comme

http://mysite.com/something/otherthing?foo=bar&x=y

à réécrire comme

http://mysite.com/something/otherthing.php?foo=bar&x=y

En d'autres termes, il suffit de rendre l'extension .php facultative, universellement.

Était-ce utile?

La solution

Je le ferais de cette façon. Fondamentalement, si le fichier n'existe pas, essayez d'y ajouter .php.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ $1.php [QSA,L]

Autres conseils

Si vous pouvez modifier le fichier httpd.conf et quoi, vous pouvez également indiquer:

ForceType application/x-httpd-php

dans le fichier car cela forcera tous les chemins appelés à être des fichiers PHP. Je pense que cela fonctionne également avec les chaînes de requête.

Ceci fonctionne:

RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^/?([^/\.]+)$ /$1.php [L]

L’idée est de s’assurer qu’il existe une chaîne de requête (point d’interrogation plus substance) et, le cas échéant, de vérifier si le contenu précédant le point d’interrogation n’a pas d’extension et, le cas échéant, d’ajouter .php.

Quelque chose comme ...

RewriteRule /something/(.+)?(.+) /something/$1.php?$2

fonctionnerait probablement.

Ne correspond qu'aux chemins sans extension:

RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php

Modifier: lors de mes tests, la chaîne de requête est automatiquement transmise. Si ce n'est pas le cas, vous pouvez utiliser ceci à la place:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top