Por "eliminar .html", ¿quiere decir "no es necesario que .html esté presente"?
Lightness Races in Orbit
@Tomalak: Sí y también redirigir las URL con ".html" a las que no lo tienen. Mi problema es que esto da como resultado una redirección infinita. Mi configuración actual permite que www.example.com/page.html y www.example.com/page sean accesibles, lo que no es compatible con SEO.
NOTA: Al probar su .htaccessno utilice redireccionamientos 301. Utilice 302 hasta finalizar la prueba, ya que el navegador almacenará en caché 301. Ver https://stackoverflow.com/a/9204355/3217306
Excelente diagrama para ayudar a explicar la respuesta.
Ric
El consejo sobre los 301 y la caché del navegador es lo que resolvió mis problemas.
bgfvdu3w
@KnocksX Ya no soy un webmaster y no estoy en condiciones de poder ayudar
binaryfunt
84
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.
Esto no hace nada por mí. ¿Hay alguna razón por la que no funcionaría?
Michael Yaworski
¿Tiene un archivo real para el enlace solicitado? Eso provocaría el!-f
Martijn
72
Esto debería funcionar para ti:
#example.com/page will display the contents of example.com/page.htmlRewriteCond%{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/pageRewriteCond%{THE_REQUEST}^[A-Z]{3,9}\ /.*\.html\ HTTP/RewriteRule^(.*)\.html$ /$1 [R=301,L]
Estaba obteniendo un 404 en Godaddy con este código y lo arreglé poniendo: Options + FollowSymLinks -MultiViews -Indexes en la parte superior.
Labanino
1
Creo que esta es la mejor y más completa respuesta, ¡gracias!
ctekk
Traté de hacer esto en localhost, pero no funciona, ¿hay alguna otra cosa que deba hacer, tengo que vincular el archivo .htaccess o cómo lo reconoce la página?
Pianistprogrammer
¿Cómo agrego la extensión .php a # 301 de example.com/page.html a example.com/page, es posible?
20
Deberá asegurarse de tener Options -MultiViewstambién.
Nada de lo anterior funcionó para mí en un host cPanel estándar.
De todas las respuestas anteriores, esta finalmente funcionó ... Creo que porque mi sitio está alojado en godaddy con cPanel. La clave es Opciones -MultiViews
Brad Vanderbush
Sí, nada en esta sección funciona ¡Espere esta respuesta! ¡Salvaste el día!
Neil Bannet
Gracias amigo. No estoy seguro de por qué los demás no funcionaron como se esperaba.
Nanoo
13
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 .
Esto pareció funcionar para mí, a diferencia de las otras soluciones presentadas aquí, gracias. Sin embargo, agregaría que aún necesita actualizar los enlaces en su HTML (por lo tanto, si originalmente está vinculando a su archivo .html como <a href="page1.html"> </a>, debe actualizar como <a href=" example.com/page1"> </ a > y luego funcionará.)
Lorenzo
El cambio fundamental para mí fue un RewriteBase /poco. Desafortunadamente, no entiendo por qué funcionó, pero supongo que lo aprenderé pronto.
Keno Clayton
4
Para aquellos que usan el alojamiento de Firebase, ninguna de las respuestas funcionará en esta página. Porque no se puede usar .htaccessen el alojamiento de Firebase. Tendrá que configurar el archivo firebase.json. Simplemente agregue la línea "cleanUrls": trueen su archivo y guárdelo. Eso es.
Después de agregar la línea firebase.json se verá así:
Para eliminar la extensión .html de sus URL, puede usar el siguiente código en root / htaccess:
#mode_rerwrite start hereRewriteEngineOn# 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 extensionRewriteRule^(.*)$ $1.html [NC,L]
Respuestas:
Creo que alguna explicación de la respuesta de Jon sería constructiva. El seguimiento:
comprueba que si el archivo o directorio especificado no existe, entonces la regla de reescritura procede:
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/3217306Actualizació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 regularesFuentes:
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
fuente
Para eliminar la extensión .html de sus URL, puede usar el siguiente código en root / htaccess:
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.
fuente
Con .htaccess bajo apache, puede hacer la redirección de esta manera:
En cuanto a la eliminación de .html de la URL, simplemente enlace a la página sin .html
fuente
!-f
Esto debería funcionar para ti:
fuente
Deberá asegurarse de tener
Options -MultiViews
también.Nada de lo anterior funcionó para mí en un host cPanel estándar.
Esto funcionó:
fuente
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 .
fuente
Utilizo este .htacess para eliminar la extensión .html de mi sitio URL, verifique que este sea el código correcto:
fuente
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í:
fuente
Para eliminar la extensión .html de sus URL, puede usar el siguiente código en root / htaccess:
Gracias
fuente
Prueba esto :) no sé si funciona.
fuente