Riscrivi tutte le query per non aver bisogno dell'estensione .php usando una RewriteRule mod_rewrite

Mi piacerebbe avere tutte le domande come

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

essere riscritto come

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

In altre parole, basta rendere l'estensione .php opzionale, universalmente.

Lo farei in questo modo. Fondamentalmente, se il file non esiste, prova ad aggiungere .php.

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

Se puoi cambiare httpd.conf e cosa fare, puoi anche inserire:

 ForceType application/x-httpd-php 

nel file in quanto impone tutti i routes chiamati a essere file PHP. Penso che questo funzioni anche con le stringhe di query.

Questo funziona:

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

L'idea è di assicurarsi che ci sia una string di query (punto interrogativo più materiale) e in tal caso controllare se la roba prima del punto interrogativo non ha estensione e, in tal caso, aggiungere .php.

Qualcosa di simile a…

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

probabilmente functionrebbe

Trova solo routes senza estensione:

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

Modifica: nei miei test, la string di query viene passata automaticamente. Se non lo fa, puoi usare questo invece:

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