2008-10-08 10 views

Respuesta

6

Lo haría de esta manera. Básicamente, si el archivo no existe, intente agregar .php a él.

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

Esto es lo que estoy haciendo ahora. Perfecto. ¡Gracias! – dreeves

+0

Entonces, ¿dice que ejecutará RewriteRule si el recurso al que se accede no es un archivo o directorio? – bafromca

0

Algo así como ...

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

probablemente funcionaría.

+0

Eso no parece funcionar. – dreeves

+0

Probablemente necesite escapar del signo de interrogación con una barra invertida –

+0

Lo intenté. Creo que el material de la cadena de consulta no es parte de lo que coincide en una RewriteRule. Tienes que hacer un RewriteCond por separado en la cadena de consulta. Ver mi respuesta – dreeves

1

Esto funciona:

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

La idea es asegurarse de que hay una cadena de consulta (signo de interrogación más cosas) y si a fin de comprobar si las cosas antes de que el signo de interrogación no tiene extensión y si es así, anexar. php.

1

Si puede cambiar el httpd.conf y qué, también puede poner:

ForceType application/x-httpd-php 

en el archivo, ya que obligará a todos los caminos llamados a ser los archivos PHP. Creo que esto también funciona con cadenas de consulta.

0

Partidos únicos caminos sin extensión:

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

Editar: En mis pruebas, la cadena de consulta se pasa automáticamente. Si no lo hace, puede usar esto en su lugar:

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

'[QSA, L]' pasa cadena de consulta ('L' significa que no procesa reglas después de esta). – NateS

Cuestiones relacionadas