Para poder acceder a tu url sin tener que poner la extensión de archivo y de esta forma utilizar urls más amigables, puedes hacerlo añadiendo este código en tu archivo .htaccess:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php
Con esto, podremos acceder a nuestra página www.miweb.com/contacto.php con la url www.miweb.com/contacto
Si además queremos el mismo efecto, pero añadiendo una barra / al final, podemos utilizarlo así:
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/$ $1.php RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ RewriteRule (.*)$ /$1/ [R=301,L]
De esta forma accederemos a nuestra página como www.miweb.com/contacto/
Comentarios
30 respuestas a «Quitar extensión .php / .html de la url con .htaccess»
|
hola muchas gracias, queria preguntar si esto es perjudicial para el SEO, pues una vez posicionado una url como «/ejemplo.html» podria generar un nuevo rastreo? podria google no identificar que ejemplo.html es igual a /ejemplo ???????????????
|
Hola Wilmar,
Si, puede ser si Google puede acceder a la misma página mediante /ejemplo.html y /ejemplo
Una forma de evitarlo es usando la etiqueta canonical para indicarle que sólo una es la principal:
<link rel="canonical" href="http://www.dominio.com/ejemplo.html" />
|
wow mira después de 3 años encontré este articulo y no me habia fijado de tu respuesta, muchas gracias, en este momento soy experto en SEO (3 años después) y no quería pasar por alto tu comentario …
muchas gracias
|
Gracias a ti Wilmar!
|
Hola Ester sobre la misma pregunta de Wilmar, según su experiencia ¿es mejor dejar de canonical «/ejemplo.html» o «/ejemplo» ?
¿Esto al final incide en que cuando nos busquen aparezca esa url en el buscador?
Muchas gracias por la ayuda!
Saludos
|
Hola Hugo,
Google cogerá el enlace que tu estés utilizando, si en tu menú tienes enlace a /ejemplo, aparecerá así.
Pero una cosa es que lo tengas redirigido para temas de usabilidad y enlaces amigables, y otra que esa página sea realmente ejemplo.html, por lo que si indicas una canonical yo la pondría con extensión.
Ojo, el SEO no es mi especialidad, así que antes de cambiar nada, consultalo con un especialista por si acaso 😉
Saludos!
|
Muchas gracias, solo que tengo un problema,, tengo miles de post indexados en google con .html al final.
como puedo redireccionar todos los post con .html al final hacia este ejemplo:
domonio,com/ejemplo-post-2017
estoy usando wordpress, alguna forma de redireccionar todos automaticamente sin usar .html?
|
Hola Miguel!
Precisamente es lo que se explica en este artículo, sin tener que modificar los archivos ni urls en sí, con htaccess le dices que si alguien va, por ejemplo a dominio.com/ejemplo-post-2017, cargue automáticamente la página dominio.com/ejemplo-post-2017.html
Espero haberme explicado, cualquier duda me lo dices!
Saludos,
|
Hola!
Y el caso contrario? Es decir tengo enlaces de entrada viejos a mi web.com/ejemplo.html y ahora mi enlace de wordpress es
web.com/ejemplo
Entones provocan error 404… Como puedo arreglarlo?
|
Hola Miguel,
Ese caso es diferente, yo tengo este código apuntado para hacer lo que comentas, pero ojo, hace mucho que no lo pruebo, así que tesetalo bien antes:
RewriteRule (.+)\.html?$ http://example.com/$1/ [R=301,L]
Saludos!
|
Gracias! Lo probaré…
|
Aun funciona!!!1 Gracias
|
Hola, soy nuevo aquí, y llevo algún tiempo buscando la manera buena de quitar la extensión .html de mis url.
La verdad, aún no me ha funcionado ninguna, y es que no explican si en mi documento html debo cambiar mis url. Es decir…Yo tengo Inicio. Y no sé si debo quitarle el .html a ésta etiqueta también, o dejarla como está, y que el .htaccess haga su trabajo.
He hecho todo lo que se supone que hay que hacer, crear el .htaccess, copiar el código que se enseña, subirlo en la carpeta raíz tal como se indica, junto con el resto de archivos, pero al actualizar mi sitio, siempre me da error..y es desesperante. No sé si hay que crear un redireccionamiento, o es que saltan algún paso..o yo no hago algun paso bien, que también puede ser… Muchas gracias por compartir tu conocimiento, y a la espera de comprobar si funciona o no.
|
Hola Joaquin,
Hay dos temas que comentas, uno respecto a los enlaces. Si la redirección funciona correctamente, en los enlaces de tu web debes quitar el «.html» de los links y dejarlos como «href=’/contacto/’», por ejemplo.
Pero si dices que al subir el .htacces al servidor te da siempre error es que hay algún error en ese archivo o alguna restricción de tu servidor. Te recomendaría que contactases con el soporte técnico del hosting para que te aclararan si puedes utilizar el módulo rewrite en tu servidor.
Saludos!
|
Hola, que puede pasar que no me funciona ? lo estoy probando en local usando wamp, gracias
|
Hola Marcos!
Si no te funciona en local es posible que sea debido a la configuración del apache en WAMP, ya que es necesario que el módulo de rewrite (mod_rewrite) esté activado. Mira este artículo a ver si te sirve: http://www.orchidbox.com/post.php?title=How_to_enable_mod_rewrite_module_in_apache_in_xampp_wamp
Saludos!
|
Hola,
Gracias por el aporte pero tengo una pregunta:
En esta linea – RewriteRule ^(.*)$ $1.php – habría que cambiar el «1.php» por «index.php» verdad ??
|
Hola Daniele!
No, los números que aparecen no hacen referencia a páginas en concreto, sino son variable de las reglas de rewrite. Pruébalo tal cual está, a mi me funciona así.
Saludos!
|
Hola, yo tengo direcciones dinámicas de acuerdo a mis usuarios, es decir, por ejemplo tengo un archivo ingresar.php pero al iniciar sesión un usuario, la ruta se cambia a ingresar.php?id=2; esto debido al id que tiene el usuario en sesión.
Al quitar la extensión, también se quitaría el ?id=2 o más bien tendría problemas con esto?
Gracias.
|
Hola Joseph!
Puedes usar instrucciones rewrite en tu .htaccess para poder utilizar una estructura tipo http://www.dominio.com/ingresar/2/, que sustitiría a la url que indicas ingresar.php?id=2
Para que te hagas una idea, esto sería usando la regla:
RewriteRule ^ingresar/([^/]*)/([^/]*)\.html$ https://www.dominio.com/ingresar.php?id=$1 [L]
Pero lo ideal es que busques información sobre el rewrite en htaccess para ver todas las opciones y la información completa, ya que es un archivo muy delicado que puede provocar error en toda la web.
Saludos!
|
Hola, tengo varias páginas indexadas con .html al final, y en el wordpress nuevo ahora no me pone la extensión… pero con este código que indicas en el htaccess no me redirige de la url con .html a la url sin la extensión.
Ahora mismo tenía el htaccess así:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
pero si le añado el código de:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
antes de cerrar lo de sin borrar lo anterior,
no funciona la redirección, carga bien la página pero da un 404 como antes y no sé exactamente qué tendría que quitar del anterior código htaccess o cómo debería dejarlo 🙁
muchas gracias de antemano
|
Hola Estella,
El código de este post se refiere a páginas a medida, en WordPress el CMS se encarga de crear automáticamente las urls amigables, que puedes configurar desde el menú Ajustes -> Enlaces permanentes, desde allí puedes indicar el formato de las urls que quieres utilizar en tu web. Por defecto el más utilizado es «Nombre de la entrada»
Saludos!
|
Hola, gracias por responder tan rápido.
Sí, así lo tengo en enlaces permanentes, pero como te digo, no funciona, sigue dando un 404 porque antes los enlaces eran
http://www.loquesea.com/nombre-de-la-entrada.html
siguen dando un 404 al quedarse en http://www.loquesea.com/nombre-de-la-entrada sin el .html final
de ahí mi pregunta jeejej no son cientos de miles, pero si unos cuantos como para pensar en hacer redirecciones 301 individuales url por url… por eso pensaba si habría algo que me funcionase en htaccess pero no he sido capaz de encontrarlo
|
Hola Estella,
Me temo que en este caso es algo muy concreto que no te se decir más que de entrada yo probaría el siguiente código:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.html
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
Sin conocer la web y configuración específica es difícil saber el problema y cómo corregirlo.
Saludos,
|
Muchísimas gracias Esther.
Realmente es como dices, es un caso concreto en el que vengo de una anterior web en Joomla en la que todas la páginas llevaban lo de .html al final, y ahora se hizo una nueva en wordpress y aunque he replicado todas las urls no he podido añadirle ese .html final mediante el apartado de enlaces permanentes.
He probado el código que me pasas para el htaccess pero no he sido capaz de ponerlo bien y la web no funciona con él, supongo que a ese código he de dejarle alguna parte del anterior que había entre lo de # BEGIN WordPress y # END WordPress pero como no tengo experiencia no sé cómo «encajar» la parte del código que me pasas.
De todas maneras te agradezco infinito haberme prestado tu ayuda desinteresada, eres una crack y súper amable 🙂 un saludo
|
Muchas gracias Estella
En principio el código que te indiqué lo podrías poner al principio de todo del archivo, pero una migración de Joomla a WordPress tiene su complejidad y es un caso muy concreto que me temo no voy a poder ayudarte sin tener acceso.
Un saludo y suerte!!
|
Tengo una duda, que pasa si una carpeta y un archivo tienen el mismo nombre? por ejemplo: una carpeta de nombre blog y un archivo blog.html igual funciona?
los archivos que se encuentran en carpetas no se le puede quitar la extensión .html sino no funciona, ya he comprobado y no se como solucionar.
en dónde hay que copiar el archivo .htaccess o crearlo? ya que no me queda claro esa parte
|
Hola Joel,
El archivo .htaccess puede estar en la ruta principal de tu sitio y dentro de las carpetas, es decir, puedes tener reglas generales que afecten a todo el sitio, o algunas particulares para una carpeta en concreto.
Saludos!
|
Estoy haciendo mi primera web a puro código y necesitaba eliminar el .html y agregar una / al final de mis urls, demoré en llegar hasta aquí para encontrar el código preciso, muchas gracias por compartir tu conocimiento.
|
Gracias Francisco, me alegro que te haya podido ser útil!