Cuando un sitio es realizado en .html o .php, generalmente muestra las extensiones al final de cada archivo en la URL. Las paginas del sitio se mostraran de esta manera www.tusitioweb.com/contacto.html o www.tusitioweb.com/contacto.php.
Administradores de contenido o CMS tales como WordPress o Joomla quitan esta extensión por defecto aunque puede agregarse en su configuración ¿Pero si es el caso contrario? es decir, si deseo quitarlas de archivos que no pertenecen a ningún CMS, entonces se deben agregar las siguientes lineas al archivo .htaccess.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.html [NC,L] |
En el ejemplo anterior quitamos la extensión .html, si deseas quitar la extensión .php solo debes que cambiar $1.html por $1.php. Es posible que revises el sitio web y todavía la extensión no se ha quitado, debes revisar los enlaces que tienes escritos en tus archivos html, debes cambiar la URL en estos enlaces también para obtener el resultado.
Modificar enlaces HTML
Tus enlaces se deben ver de la siguiente manera:
<a href="/contacto.html">Texto</a> |
Debes modificarlos como se muestra a continuación:
<a href="contacto">Texto</a> |
Como puedes ver una vez realizado este ajuste nos mostrara la URL sin la extensión (www.tusitioweb.com/contacto), de esta forma es posible modificar las URL de un sitio web de acuerdo a sus intereses y posicionamiento.
No olvides comentar si tienes alguna duda y si te ha gustado el articulo compártelo ¡Muchas Gracias!
Michel.
Por favor si puedes apoyarme con esto:
Resulta que tengo alojado un sitio (no wordpress) en BlueHost y la cuestión es que logro quitar la exigencia de poner en las url las extensiones .php .html; actualmente figura esta regla y no sé que hace ciertamente:
# BEGIN WordPress
# Las directivas (líneas) entre «BEGIN WordPress» y «END WordPress» son
# generadas dinámicamente y solo deberían ser modificadas mediante filtros de WordPress.
# Cualquier cambio en las directivas que hay entre esos marcadores serán sobrescritas.
RewriteEngine On
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
# php — BEGIN cPanel-generated handler, do not edit
# Set the “ea-php74” package as the default “PHP” programming language.
AddHandler application/x-httpd-ea-php74 .php .php7 .phtml
# php — END cPanel-generated handler, do not edit
Intenté eliminando y poniendo otras posibles pero nada de nada.
Mil gracias por tu aporte.
Hola, la mayoría de los CMS permiten hacerlo desde la configuración, en WordPress debes dirigirte a «Ajustes»-«Enlaces permanentes» y ahí puedes modificar la manera en se muestran los enlaces, busca si esta opción se encuentra en tu CMS. Si no lo tienes alojado con CMS, entonces probablemente debes cambiar también los enlaces que tengas en documento HTML o PHP como se encuentra descrito en el articulo. Espero haber ayudado, si continuas teniendo el inconveniente házmelo saber y vemos que otra solución podemos utilizar. Un saludo
Si quisiera eliminar la extensión .php y ademas ponerle un slash al final como seria?
Ya que en google las urls aparecen con slash porque estaba hecha en wordpress
Gracias de antemano amigo,
Hola, en WordPress puedes hacerlo con mas fácilmente, debes dirigirte a «Ajustes»-«Enlaces permanentes» y ahí puedes modificar la manera en se muestran los enlaces. Un saludo
Muchas gracias por tu post, tenía una pregunta:
Una vez he quitado la extensión .html http://www.misitio.com/camisetas/manga corta
Google ya tiene indexada la web con .html http://www.misitio.com/camisetas/manga corta.html
Cómo le digo a google que cuando alguien pinche en el antiguo redirija a la nueva url sin .html?, ahora mismo está dando un error 404.
Gracias.
Saludos!.
Hola, puedes hacerlo a través de un redireccionamiento, puedes ver el articulo: https://internetedadinero.com/hacer-redirecciones-301/, en el explico como puedes hacer un redireccionamiento desde el enlace que describes al nuevo, sirve si has añadido enlaces externos anteriormente, como sucede por ejemplo en tu caso. Un saludo
Tengo un sitio con hosting de firebase.. agregue el archivo .htaccess a mi carpeta raiz y no me funciona. Cuando voy a mi segunda pagina, solo me aparece el html de la primera sin css.
xmobiliario.com — para que lo revisen como esta
Ayuda!!
Hola, es posible que no hayas modificado los enlaces al sitio, ademas de realizar el cambio en .htaccess, debes modificar de nuevo los enlaces. Espero haber ayudado, si no es ese el inconveniente, coméntame y vemos que otra solución podremos brindar. Un saludo
Hola,
Esto podría afectar al SEO de mi sitio web en html?
Podría Google considerar contenido duplicado? ya que se puede acceder al mismo contenido desde diferentes links
La etiqueta canonical la tengo así: http://www.misitio.com/blog.html
Debería cambiarla sin la extensión?
Hola, no soy programador pero he echo mi pagina a punta de prueba y error y me interesa mucho esto, pero en realidad no se como instalarlo.
Me gustaría que fuera:
lejoramirez.com/livemusic
en vez de
Lejoramriez.com/livemusic.html
crea un archivo .htaccess en tu directorio raiz Ej: tusitio/.htaccess y dentro del archivo coloca el codigo que esta mas arriba en la publicación. Cuando vayas a la dirección contendi , por ej colocalo asi en un tag a Contenido y la url se mostrara sin la extension. Abrazo !
En tu Administrador de archivos de CPanel vienen la configuración de «mostrar archivos ocultos» la habilitas y una vez que haces esto, te diriges a la carpeta public_html en donde encontraras el archivo .htacces en el qué tendrás que agregar el código que esta en esta página para quitar la extensión .html
Hola Michael , cual sería el código para que en lugar de que aparezca eje.
www,tuportalweb.com/index.php
solo me aparezca http://www.tuportalweb.com he intentado con el código RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L] sin embargo no me funciona ya probé si lee el htaccess y si lo lee, hasta pude redireccionarlo, a ver si me puedes ayudar
Hola Oscar ¿ya modificaste las URL de los enlaces en el documento index.php? en este documento también deben ser modificadas las URL del enlace para que no te direccione al mismo. Puede ser que ese sea el problema, avísame si lo resuelves o miramos que otra cosa pueda ser. Un saludo
Buenas, mi duda es para rutas que están dentro de carpetas.
Ejm: Tengo una ruta desde la index que va a la ruta /proyectos/categoria/pagina.php
en el RewriteRule del .htaccess cómo tendría que poner para que me respetase las carpetas?
Gracias y un saludo
Hola, segun veo tu sitio podría ser dinámico, asegúrate de cambiar los enlaces que tienes en los archivos, supongo que debes agregar un trailing slash, si tu sitio es estático debes añadirlo por cada enlace.
Trailing slash
RewriteRule ^(.+)/contacto$ $1/contacto/ [R,L]
RewriteRule ^(.+)/servicios$ $1/servicios/ [R,L]
Si tu sitio web es dinamico entonces debes agregar algo similar a este código
RewriteRule ^noticias/(.+)/(.+)/$ post.php?id=$1&tit=$2 [NC,L]
Espero haber podido ayudar, si tienes alguna duda u otro inconveniente coméntame y miramos que podemos hacer. Un saludo
Hola Michel Haddad, muchas gracias por el aporte, tengo una duda:
¿es posible hacer esto?:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Quitar extensiones .html y .php al mismo tiempo. Lo intenté pero sólo quita la extensión de la regla que aparece al principio.
Saludos
Hola Xavier, el siguiente codigo sirve para eliminar las dos extensiones del sitio web.
Codigo:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
#RewriteRule ^([a-z]+)/?$ $1.php [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html
#RewriteRule ^([a-z]+)/?$ $1.html [NC]
Espero que te sirva, si no coméntame y buscamos otra solución, gracias por tu interés, un saludo.
En este código
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
#RewriteRule ^([a-z]+)/?$ $1.php [NC]
¿Por qué comentas esta última linea?
Hola, se usa para organizarlos. Un saludo
Hola, como podría compatibilizar el rewrite con otro rewrite que fuerza usar el dominio https? Al implementarlo, me muestra en chrome que existen muchas redirecciones y no ha podido cargar la pagina. Gracias
Hola, segun lo que entiendo deseas redirigir a HTTPS, en ese caso debes añadir las siguientes lineas.
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteCond %{HTTP_HOST} ^tu_dominio\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.tu_dominio\.com$
RewriteRule ^(.*)$ https://tudominio.com/$1 [R=301,L,NE]
Pero tambien puedes solo añadirlo en una URL especifica, el cual seria de esta manera para la URL https://tudominio.com/servicios.html
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteCond %{REQUEST_URI} !\/servicios\.html$ [NC]
RewriteCond %{HTTP_HOST} ^tu_dominio\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.tu_dominio\.com$
RewriteRule ^(.*)$ https://tudominio.com/$1 [R=301,L,NE]
Espero haber aclarado tus dudas, quedo atento a cualquier otra duda o inconveniente que tengas. Gracias por tu interés, un saludo
Hola Michel, paso a comentarte que tu aporte me ha funcionado muy bien, no hay errores, es excelente.
Muchas gracias Leonardo, es un gusto poder ayudarte, un saludo
Hola, buen post!
Tengo unas consultas, cómo puedo lograr que la extensión siempre se elimine al final de la url, aunque las personas ingresen por ej -> http://www.pagina.com/pagina.html ?
Es decir, como puedo lograr que de igual manera, la página siempre quede sin la extensión? Porque cuando quito la extensión la página carga.. y cuando la pongo, también, eso quiero evitar y lo último, cómo consigo añadir de forma automática una barra al final? Entonces el link quedaría -> http://www.pagina.com/pagina/, siempre independiente que la persona ingrese con o sin la extensión.
Gracias, saludos
Hola, es posible que sean los enlaces que tienes en tu web, ellos también deben cambiarse, en el caso de agregar un trailing slash, debes añadirlo en tus paginas de esta manera si tu sitio es estático.
Trailing slash
RewriteRule ^(.+)/programas-exclusivos$ $1/programas-exclusivos/ [R,L]
RewriteRule ^(.+)/contacto$ $1/contacto/ [R,L]
RewriteRule ^(.+)/servicios$ $1/servicios/ [R,L]
De ser dinamico entonces deberias agregar algo similar a este código
RewriteRule ^noticias/(.+)/(.+)/$ post.php?id=$1&tit=$2 [NC,L]
Espero haber aclarado tu pregunta, si tienes alguna otra duda o algun inconveniente no olvides comentarlo. Un saludo
Hola !!!
Gracias por el post !
Me funciona perfecto! El único inconveniente, es que intento ingresar el link poniendo igual la extensión y carga la página de ambas maneras, con y sin.. cómo puedo evitar eso? Porque de esa manera se me duplican las paginas! Entonces me gustaría que si el usuario ingresa –> http://www.pagina.com/pagina.html , el resultado siempre sea –> http://www.pagina.com/pagina/, independiente de las extensiones con las que trate de ingresar, que siempre se elimine la extensión.. ah ! y esa barra al final cómo podría añadirse siempre también de manera automática?
Muchas gracias !
Buenas tardes Michel, primero gracias por compartirlo, pero a mi ni me funciona..he probado en local, y subiendolo a mi hosting.
el .htaccess está en la raíz, y no sé si en el código tengo que cambiar algo por mis propios links de menú.
Tal cual lo explicas a mi no me funciona.
Hola Joaquin, debes agregar las lineas que aparecen en el primer párrafo al archivo .htaccess. En ellas si deseas quitar la extensión .php solo debes que cambiar $1.html por $1.php. Por ultimo debes revisar los enlaces a tus URL, los enlaces que tienes escritos en tus archivos .html o .php, y cambiar la URL en estos enlaces también para obtener el resultado. Es posible que hayas olvidado cambiar los enlaces en el archivo del sitio y por eso no puedes ver el resultado. Espero haberte ayudado, quedo atento por si tienes alguna otra duda. Muchas gracias por tu interés, un saludo