¿Cómo eliminar .html
de la URL de una página estática?
Además, necesito redirigir cualquier URL .html
a la que no la tiene. (es decir, www.example.com/page.html
a www.example.com/page
).
¿Cómo eliminar .html
de la URL de una página estática?
Además, necesito redirigir cualquier URL .html
a la que no la tiene. (es decir, www.example.com/page.html
a www.example.com/page
).
Respuestas:
Creo que alguna explicación de la respuesta de Jon sería constructiva. El seguimiento:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
comprueba que si el archivo o directorio especificado no existe, entonces la regla de reescritura procede:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Pero ¿qué significa eso? Utiliza expresiones regulares (expresiones regulares) . Aquí hay algo que hice antes ...
Creo que eso es correcto.
NOTA: Al probar su .htaccess
no utilice redireccionamientos 301. Utilice 302 hasta finalizar la prueba, ya que el navegador almacenará en caché 301. Ver https://stackoverflow.com/a/9204355/3217306
Actualización: estaba un poco equivocado, .
coincide con todos los caracteres excepto las nuevas líneas, por lo que incluye espacios en blanco. Además, aquí hay una útil hoja de trucos de expresiones regulares
Fuentes:
http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2
https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules
Para eliminar la extensión .html de sus URL, puede usar el siguiente código en root / htaccess:
RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
NOTA: Si desea eliminar cualquier otra extensión, por ejemplo, para eliminar la extensión .php, simplemente reemplace el html en todas partes con php en el código anterior.
Con .htaccess bajo apache, puede hacer la redirección de esta manera:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
En cuanto a la eliminación de .html de la URL, simplemente enlace a la página sin .html
<a href="http://www.example.com/page">page</a>
!-f
Esto debería funcionar para ti:
#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]
Deberá asegurarse de tener Options -MultiViews
también.
Nada de lo anterior funcionó para mí en un host cPanel estándar.
Esto funcionó:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Gracias por tus respuestas. Ya resolví mi problema. Supongamos que tengo mis páginas en http://www.yoursite.com/html , se aplican las siguientes reglas de .htaccess .
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
RewriteRule .* http://localhost/html/%1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
RewriteRule .* %1.html [L]
</IfModule>
Utilizo este .htacess para eliminar la extensión .html de mi sitio URL, verifique que este sea el código correcto:
RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]
RewriteBase /
poco. Desafortunadamente, no entiendo por qué funcionó, pero supongo que lo aprenderé pronto.
Para aquellos que usan el alojamiento de Firebase, ninguna de las respuestas funcionará en esta página. Porque no se puede usar .htaccess
en el alojamiento de Firebase. Tendrá que configurar el archivo firebase.json. Simplemente agregue la línea "cleanUrls": true
en su archivo y guárdelo. Eso es.
Después de agregar la línea firebase.json se verá así:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Para eliminar la extensión .html de sus URL, puede usar el siguiente código en root / htaccess:
#mode_rerwrite start here
RewriteEngine On
# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.
RewriteCond %{REQUEST_FILENAME} !-d
#Check for file in directory with .html extension
RewriteCond %{REQUEST_FILENAME}\.html !-f
#Here we actually show the page that has .html extension
RewriteRule ^(.*)$ $1.html [NC,L]
Gracias
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Prueba esto :) no sé si funciona.