.htaccess redirige todas las extensiones, excepto css y javascript

Tengo un archivo .htaccess que redirige cualquier extensión a una url que no sea de extensión y muestra el nombre de archivo solicitado + .php . Funciona muy bien con la (. *) Parte de las condiciones.

Cuando escribo domain.com/file.html o domain.com/file.xml , muestra file.php y la URL se ve como domain.com/file .

Solo me gustaría saber cómo exculpar extensiones como .js y .css de la expresión. No quiero redirigirlos a ningún otro archivo php.

Intenté cosas como: (. *. (Js | css)) en lugar de (. *) Pero no puedo encontrar una solución que funcione …

El código actual es este:

 RewriteEngine On RewriteBase / # # to display the name.php file for any requested extension (.*) # RewriteRule ^(.*)\.(.*) $1\.php # # to hide all type of extensions (.*) of urls # RewriteCond %{THE_REQUEST} ^[AZ]+\s.+\.(.*)\sHTTP/.+ RewriteRule ^(.+)\.php $1 [R=301,L] # # no extension url to php # RewriteCond %{REQUEST_FILENAME}.php -f RewriteCond %{REQUEST_URI} !/$ RewriteRule (.*) $1\.php [L]  

Si su versión de Apache lo admite, puede usar “lookahead negativo” y escribir la primera RewriteRule así:

 RewriteRule ^(.*)\.(?!js|css)([^.]*)$ $1\.php 

La parte [^.] asegura de que (.*)\. empareja todo hasta el final . , “posicionar” el punto de mira negativo en el lugar correcto.

La idea principal de la redirección es reenviar algo, cuando no está allí, por lo que la redirección solo funcionará si la URL solicitada no está presente. Si tiene un archivo http://mysite.com/js/script.js , siempre abrirá ese archivo como uno normal.

Entonces, en su caso, no necesita una redirección específica para los archivos css y js, si es que realmente están allí.

Lo que podría necesitar hacer es señalar la ruta completa de esos archivos. Por ejemplo:

  • http://misitio.com/js/script.js (trabajos)
  • /js/script.js (trabajos)
  • js / script.js (fallará si está bajo un directorio redireccionado diferente y luego root)

etc …