¿Cómo hago que .htaccess funcione en el directorio actual y no en los subdirectorios?
-
05-07-2019 - |
Pregunta
Estoy usando mod rewrite para acceder a mis archivos PHP en el directorio raíz de mi sitio web indirectamente. Actualmente, tengo algo como esto,
RewriteRule ^(blog|about|page3|etc)$ /$1.php [L]
Pero lo que me gustaría usar es
RewriteRule ^(.*)$ /$1.php [L]
Para no tener que actualizar mi archivo .htaccess cada vez que quiera agregar una nueva página a mi sitio web. Sin embargo, el problema con esto es que también afecta a mis subdirectorios. Lo que hace que las imágenes de CSS, javascript e inaccesibles se redireccionen a " /dir/example.png.php" ;.
Entonces, ¿cuál es la mejor solución aquí?
Solución
Prueba esta regla:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule .* <*>.php [L]
Otros consejos
Edite el .htaccess
para esto:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1.php [L]
Después de iniciar el motor de reescritura, primero verificará si el archivo solicitado es un archivo real en el sistema, o si en realidad es un directorio. Si no es ninguno de esos, ejecutará la regla, que en este caso es tratar de encontrar el archivo agregando .php
y sirviéndolo.
Los subdirectorios, imágenes, CSS y similares estarán bien porque saldrán de la reescritura una vez que se encuentren.
Lo haría con filtros para ignorar los subdirectorios. De esa manera, solo tiene que cambiarlo si agrega una subcarpeta. Tendrá que agregar una línea como Sosh si tiene imágenes u otros archivos en la carpeta
Lo siguiente ignoraría " images " y "js" subcarpetas y redirigir todo lo demás
RewriteRule ^images* - [L]
RewriteRule ^js* - [L]
RewriteRule ^(.*)$ /$1.php [L]
Algo como esto (tenga en cuenta el!):
RewriteRule !\.(js|ico|gif|jpg|png|css|zip|gz|html|xml)$ index.php