Me gustaría hacer una regla de reescritura que elimine todas las extensiones, independientemente del nombre del archivo.
https://example.com/filename.extension de archivo.extensión -> https://example.com/filename de archivopor ejemplo:
https://example.com/horses.txt -> https://example.com/horseshttps://example.com/icecream.json -> https://example.com/icecreamLo intenté:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)\.*$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ *? [QSA,L] </IfModule>no funciona como debería
Solo puede hacer razonablemente lo que está pidiendo con MultiViews .
Por ejemplo, tan simple como:
Options +MultiViewsDebe eliminar sus directivas mod_rewrite existentes.
Ahora, una solicitud para example.com/horses se enrutará correctamente a /horses.txt , o cualquier extensión de archivo que esté utilizando. MultiViews usa mod_negotiation.
Esto no es tan fácil de hacer con mod_rewrite, ya que necesita probar cada extensión de archivo para determinar en qué archivo necesita volver a escribir para enrutar la solicitud correctamente. p.ej. ¿Debe una solicitud para example.com/horses dirigirse a /horses.txt o horses.jpg ? MultiViews hace esta comparación por usted.
Me gustaría hacer una regla de reescritura que elimine todas las extensiones
Aunque, en realidad debe eliminar la extensión del archivo en la fuente HTML. Esto no es algo que haga en .htaccess , a menos que necesite conservar el SEO o los vínculos de retroceso que ya se han vinculado a las URL antiguas.
ACTUALIZACIÓN: Quizás no fui lo suficientemente claro, me gustaría que la URL se muestre sin la extensión, incluso si está vinculada a ella, o que vaya a ese archivo si está vinculada sin la extensión.
Bueno, debe eliminar la extensión de archivo en todos sus enlaces internos. Puede emitir un "redireccionamiento" en .htaccess para eliminar la extensión en beneficio de los motores de búsqueda y los enlaces de terceros, pero si confía en esto para sus enlaces internos, potencialmente ralentizará a los usuarios y a su sitio, ya que está duplicando el número. de solicitudes que llegan a su servidor.
Para eliminar la extensión de archivo para solicitudes directas (SEO/enlaces de terceros), puede hacer algo como esto:
RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^([^.]+)\.[\w]{2,4}$ /$1 [R=302,L]Esto supone que el único punto en la ruta de la URL es el que delimita la extensión del archivo.
La parte difícil es volver a escribir internamente la solicitud en el archivo subyacente con una extensión; ahí es donde entra MultiViews (primera parte de mi respuesta).