
¿Qué es una URL amigable? Lo mejor es un ejemplo. Esto NO es una URL amigable:
![]()
En cambio esta SI es una URL amigable:
![]()
Su propio nombre lo indica: las URL amigables son más fáciles de usar y de recordar por los usuarios y también se dice (y hay quien dice que no) que son mejores para el posicionamiento en buscadores. Además describen mucho mejor los enlaces dentro de una página web y añade un mayor nivel de profesionalidad a nuestras webs.
De todas formas, cuando hemos creado una página dinámica en PHP lo normal es que tengamos URL no amigables. ¿Cómo las convertimos en amigables de manera automática? Una manera de hacerlo es con un archivo .htaccess y gracias a Apache y su mod_rewrite.
Veamos la teoría: mod_rewrite es un módulo de Apache que permite manipular en el servidor las URLs solicitadas. Es decir, cuando llega al servidor la solicitud de una URL, esta se comprueba con respecto a una serie de reglas creadas con Expresiones Regulares creadas para detectar un patrón determinado. Si se encuentra ese patrón en el URL y se cumple la condición impuesta por la Expresión Regular se sustituye el patrón por una cadena de texto o por una acción determinada.

IMPORTANTE: Para que todo esto funcione tiene que estar activado el módulo mod_rewrite en nuestro servidor Apache. Podemos saber si lo está simplemente con:
1 | <?php phpinfo(); ?> |
Y de entre toda la información recibida si el módulo está activado tendremos:

Lo más normal es que esté activado. Sino fuera así quizás tendríamos que hablar con nuestro proveedor de hosting.
Una vez sabemos que mod_rewrite está activado lo que necesitamos es un archivo .htaccess ¿Qué es un archivo .htaccess? Es un fichero de configuración utilizado por los servidores web Apache. Son archivos de texto.
¿Qué vamos a escribir en el archivo .htaccess? Como decíamos antes, una serie de Expresiones Regulares para interpretar el URL entrante y crear un URL saliente interpretable por nuestro código. Si no sabéis nada sobre Expresiones Regulares (o Regular Expressions en Inglés) es importante que leais algo sobre las mismas antes de seguir. Con una simple búsqueda en Google podréis encontrar gran cantidad de tutoriales. Si sabéis inglés, este tutorial de themeforest es muy bueno. También podéis bajaros esta hoja de referencia de Expresiones Regulares (en inglés)
Bueno, vamos a pasar a la acción. Os aconsejo que lo hagáis también vosotros improvisando casos distintos para poderlo comprender mejor. Vamos a empezar por un ejemplo sencillo: Vamos a crear dos archivos, uno index.php y otro clientes.php
index.php tendrá únicamente un enlace a clientes.php, para simplificarlo todo un poco.
1 2 3 4 5 6 7 8 9 10 11 12 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Ejemplo de URL amigable</title> </head> <body> <h1>Ahora estás en index.php</h1> <a href="clientes/juan">Juan</a> </body> </html> |
Como podéis ver el enlace es ya una URL amigable. Sin embargo al hacer click sobre el enlace necesitamos interpretar esa URL que llega al servidor para que este sepa qué hacer. Creamos un archivo de texto, lo grabamos como .htaccess y escribimos en él:
1 2 3 4 5 6 7 | # Activar RewriteEngine RewriteEngine on # Reescribir la URL solicitada por el usuario # Entrada: clientes/NOMBRE/ # Salida: clientes.php?id=NOMBRE RewriteRule ^clientes/(\w+)/?$ clientes.php?id=$1 |
Vamos a ver línea a línea. En primer lugar tenemos que activar la re-escritura de la URL, para lo cual hay que activar RewriteEngine. A continuación establecemos una Regla de Re-escritura (RewriteRule) para gestionar la página clientes.php. Como véis, estamos re-escribiendo la URL amigable clientes/juan al formato normal clients.php?id=’juan’
En esta regla de re-escritura hay dos partes. Por un lado ^clientes/(\w+)/?$ que es una expresión regular que indica:

Ahora vamos con la segunda parte. En la segunda parte tenemos la expresión que sustituirá a la primera parte:

Ahora vamos a ver el archivo clientes.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php // Obtenemos el nombre del usuario desde la URL $id = $_GET['id']; ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Ejemplo de URL amigable</title> </head> <body> <h1>Ahora estás en clientes.php</h1> <p>Nombre del cliente: <?php echo $id; ?></p> </body> </html> |
Haced la prueba y veréis cómo funciona perfectamente la URL amigable. Para complicar más las cosas se pueden incluir banderas al final que cada expresión. Imaginaros por ejemplo que hubiera posibles alternativas para reescribir una URL amigable, pero queremos que una vez encuentre la primera se detenga ahí y no siga contrastándose con el resto de Expresiones Regulares. Entonces la bandera a añadir sería [L]:
1 2 | RewriteRule ^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ product.php?id_product=$2$4 [L] RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ product.php?id_product=$1$3 [L] |
Tenéis todas las banderas en esta hoja de ayuda rápida de mod_rewrite.
Por último, decir que es aconsejable añadir unas pocas líneas más a nuestro código. Lo voy a hacer aprovechando para crear un nuevo ejemplo. Supongamos un caso como este:

El archivo .htaccess que crearíamos sería:
1 2 3 4 5 6 7 8 9 10 11 12 | <IfModule mod_rewrite.c>
# Activar RewriteEngine
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
# Reescribir la URL solicitada por el usuario
# Entrada: ID-NOMBRE
# Salida: pruducto.php?id=ID
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)$ producto.php?id=$1
</IfModule> |
Hemos añadido un condicional:
1 2 | <IfModule mod_rewrite.c> </IfModule> |
para comprobar que está activado el módulo antes de hacer nada. Luego hemos añadido “RewriteBase /” que indica que el directorio base es el raíz. Si fuera por ejemplo una carpeta llamada “base” haríamos “RewriteBase /base”.
Además hemos añadido dos líneas que lo que hacen es restringir la re-escritura sólo a rutas que no existan previamente. Es decir, que no valdría por ejemplo para ejemplo.com/imagenes/logo.png. La primera línea previene los directorios que ya existan con la bandera !-d y la segunda hace que se ignoren ficheros que ya existan con la bandera !-f.
Luego, en la regla de reescritura, tenemos una entrada compuesta por números, luego va un guión (/-) y luego una cadena que puede incluir letras en mayúsculas, en minúsculas, números y guiones (por lo que 34-lampara-verde cumpliría). La salida que ya conoce nuestro código PHP (aunque esto está oculto al usuario) es producto.php?id=$1, siendo $1 el valor que hemos atrapado entre los dos primeros paréntesis (en este caso, 34). Si observáis tenemos también atrapado un segundo grupo que es ([a-zA-Z0-9-]*) y que lo podríamos recuperar con $2, pero en este caso no nos sirve.
Esto es sólo el comienzo, pero toda la base está ahí. Otra manera alternativa de conseguir URL amigables es combinar un archivo .htaccess con PHP, pero eso sería materia de otro artículo. Algunas de las lecturas recomendadas a continuación sí indican cómo hacerlo.
baluart.net: Ofrece una función muy interesante para transformar el título de una noticia (por ejemplo) y transformarlo (cambiando las letras con tildes, eñes, etc) para conseguir una frase asequible a los buscadores y navegadores – Urls Amigables con PHP
corz.org: more .htaccess tips and tricks..
nettutplus.com: Using htaccess Files for Pretty URLS
nettutplus.com: A Deeper Look at mod_rewrite for Apache
stewparkin.com: Apache Re-Writes in .htaccess
Source Rally: Make pretty URLs with PHP and mod_rewrite
AddedBytes: URL Rewriting for Beginners
webm.ag: How To Make Dynamically Generated SEO-Friendly URLs Using PHP And .htaccess
noupe: 10+ Mod_Rewrite Rules You Should Know
Sigue a Juan en Twitter, en Google+, o suscríbete al RSS Feed de Emenia para estar al día de nuestros artículos.
2011-2012 © Copyright Emenia S.L. - Creación y Diseño web \ Marketing Online \ Comunicación - Todos los derechos reservados.

Lo mismo puede hacerse con el PATH_INFO desde php sin usar rewrite
Saludos.
e no me sale nada–
active el mod_rewrite y segui exactamente como dicen pero nada llamo a la pagina y me sale..
——
¡Objeto no encontrado!
El enlace requerido no ha sido localizado en este servidor. Si usted proporcionó el enlace de manera manual le solicitamos que por favor revise los datos e intentelo de nuevo.
Por favor contacte con el webmaster en caso de que usted crea que existe un error en el servidor.
Error 404
localhost
02/06/10 21:53:21
Apache/2.2.11 (Win32) PHP/5.2.8
Hola Jack,
¿Puedes escribir qué has escrito en .htaccess para poderte ayudar?
Gracias
Hola: Estoy haciendo el ejemplo que muestras y cuando hago clic en Juan me lleva a clientes.php y me da NOT FOUND.
Segun mi hosting tengo el mod_rewrite activado.
El archivo .htaccess lo copio tal cual lo tenes vos y lo coloqué dentro del directorio public_html, que es el directorio donde tengo index.php y clientes.php.
Tambien probe de ponerlo un nivel más arriba de public_html y nada.
Podrías explicarme??
Hola Ariel,
Acabo de subir el ejemplo símplemente copiando y pegando los archivos:
http://www.emenia.es/demos-blog/htaccess/
Creo que quizás deberías revisar tu archivo .htaccess Ten en cuenta que tiene que ser un archivo de texto, sin extensión.
En mi archivo .htaccess aparece lo siguiente:
El problema es que también tengo una subcarpeta /puebas/ protegida con contraseña.
En este caso, me da la impresión de que la condición “!-f” interpreta que el archivo no existe y me reescribe la URL, cuando realmente no es que no exista, sino que no se puede acceder sin introducir la contraseña.
¿Se te ocurre alguna manera de hacer que la regla no aplique a esa carpeta?
He probado añadiendo “RewriteCond %{REQUEST_FILENAME} !.*/pruebas/.*” pero no funciona.
Muy buen tutorial, muchas gracias! no solo funciona si no que aprendees a trastear tu. gracias.
Excelente entrada, explicado desde el principio y bastante claro para empezar.
Un saludo
Hola, estoy intentando montar url amigables en una web que tiene base de datos y php. Lo que necesito es que dentro de uan carpeta en este caso llamada pais, las url sean amigables. Tengo un index.php, y otra condado.php y este es el .hteccess que intentgo poner pero no funciona
Deberia quedar:
¿como puedo comprobar si funciona la url amigable?
¿Puedo poenr el archivo .htacess solo en una carpeta para que actùe solo sobre esas url?
En que puede fallar el código que pongo.
Desconozco totalmente la programación y me resulta dificil entender lo que representa cada paso.
Como verás estoy muy verde en esto y he intentado copiar tu código pero siempre me sale error.
Hola estimado, como sería el htaccess si tengo el sgte link?:
index.php:
Ya intenté pero no hay caso…
al archivo index.php y detalles.php lo tengo todo en la misma carpeta /public_html/
Muchas gracias de antemano!.
lo unico que quiero es como se crea el archivo mas no su contenido, please ayudenme.
Lo puedes crear con un editor de textos tipo Notepad, por ejemplo, si tu programa editor no te permite hacerlo.
buenas. vi su tutorial de como crear url amigables. implemente para un proyecto de galerias de imagenes con bd. me muestra bien, pero cuando regreso al index.html no me reconoce y me muestra la pagina de la galeria de imagenes pero sin las fotos.
este es mi codigo.
me pueden ayudar en ello ?.
saludos.
Algo que no tengo todavia muy claro, es que con solo modificar el archivo .htaccess no es suficiente, sino que en cada página php tendría que modificar los links internos para que se redireccionen a las nuevas urls?
Efectivamente Javine. En el redireccionamiento del archivo .htaccess pones el link que se recibe y luego, digámoslo así, su traducción al formato que PHP entiende.
Hola Juan, seguí tu tutorial y me funcionó muy bien al crear la url amigable, en la barra de direcciones aparece lo que necesito (marcas/carros)pero al cargar ésta página se pierde toda la parte gráfica que está definida en los estilos css y sólo aparecen textos sin gráficos ni los logotipos de las marcas de autos que deberían estar, tambien desaparece la animación flash superior.
Al regresar a index.php me da error 404 url no encontrada.
El código de mi htacces es el siguiente:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.ofertacarro.com$
RewriteRule ^/?$ “http\:\/\/ofertacarro\.com” [R=301,L]
RewriteRule ^marcas/(\w+)/?$ buscar-marca.php?tip=$1
Te agradecería una ayuda.
Gracias de antemano
Hola a todos,
Primero de todo felicidades por el artículo llevo días buscando por internet y hasta que no he topado con este blog no he conseguido comprender como funcionan las url amigables con htaccess.
Ara tengo una duda a ver si alguien me la puede resolver. Según el ejemplo y si no lo entiendo mal, por cada página que quiera que tenga una url amigable tengo que hace una entrada en el htaccess. El problema es que mi página web tiene multiples páginas y eso es un auténtico fastidio. Alguien me puede decir si existe alguna forma de automatizar más este proceso?
Gracias y saludos,
Depende de la estructura de las url de tus páginas. Como verás en el artículo, puedes establecer un patrón que englobe todas tus paginas.
Dios existe!! Gracias por tan grande aportación.
LLevo dos dias intentando hacer funcionar un .htaccess para activar el mod_rewrite? y me era imposible.
He aprendido a hacerlo y me funciona.
Ahora mismo me dedico a crear personificados.
Gracias gracias
Me parece excelente este turorial.
Solo una consulta si tuviera una url asi como esta
Como sería la configuración de mi htaccess?
Gracias de Antemano, por la ayuda.
Saludos,
Hola Fernando,
Cuando tienes dos variables puedes probar a hacer algo así:
Dentro del primer paréntesis va la expresión regular para la primera variable y en el segundo para la segunda, de tal manera que la url te quedara miweb.com/nombredelapagina/8073-2010
No sé si es así como lo quieres.
Muchas Gracias !!!!
Voy a hacer la prueba.
Saludos,
La verdad no se que estoy haciendo mal… No me esta funcionando.
Habilite el modulo en el apache estoy usando el xampp, baje unos archivos para ver si me esta funcionando el modulo mod_rewrite y efectivamente me esta funcionando.
Lo cree para la el ejemplo que puse arriba y nada.
Hice otra regla para otra página e igual no me funciona /cry.
Página siguiente:
http://localhost/nueva.pagina.prueba/subcategoria.php?cid=16&sid=45 RewriteEngine on RewriteBase /nueva.pagina.prueba RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^([a-zA-Z]+)/([a-zA-Z0-9]+).htm$ /subcategoria.php?cid=$1&sid=$2 [L,NC]Que entonces lo que estoy haciendo mal?
Gracias.
Hola no tengo xampp, pero mira lo que dice este artículo sobre el uso de XAMPP mod_rewrite y las URL amigables (está en inglés pero es muy claro). No sé si será ese el problema…
Si todos esos pasos ya los realice, probe que funciona con unos archivos que baje de internet para problar la funcionalidad del mod_rewrite y me funciono.
Este ejemplo era haciendo click en un link, ok pero si yo quiero que desde que me cargue la página, se vea ocultando las variables, no me esta funcionando.
Lo otro es que en el menu el link esta como:
debe estar asi? o en el menu yo debo de cambiar el url?
Porque estuve leyendo en varios blog que suspuestamente con agregar el htaccess, no hay que hacer ningun cambio en la aplicación.
Por último la regla que definí en la parte de arriba es la correcta?
Muchas Gracias por Responder.
La verdad ha sido de mucha ayuda.
Como es el enlace que pones para que vaya a ese link? porque los números 16 y 45 (siguiendo con tu ejemplo) tienen que aparecer y la primera parte sólo incluye letras y no números ([a-zA-Z]+) mientras que dices que cid=16. El enlace parece quedar un poco raro, ya que pones que sea algo así como cid/sid.htm sin más?
Ah ok ya primera parte esta mal , deberia de agregarle los números, es que no estoy muy práctico…
Lo que quiero en realidad es ocultar mi url real.
En el menú de mi aplicación no he realizado ningún cambio en los link, van igual por ejemplo: subcategoria.php?cid=16&sid=45
donde el cid es el código de mi categoria y el sid es el de mi subcategoría.
El htacess es solo como lo puse arriba me hace falta algo mas?
es problema es que ya coloque el archivo htacess y el url me sigue saliendo:subcategoria.php?cid=16&sid=45
no cambia nada.
buenas tardes jack, he realizado todo deacuerdo a tu explicación pero no sale nada.
me explico
1. archivo .htaccess
lo coloque tal cual como tu dices.
en index.php tengo lo siguiente
pero este enlace me sigue saliendo igual y cuando pincho en el enlace el resultado es igual
muchas gracias por tu ayuda.
Hola, vengo siempre a tu blog ya que encuentro cosas realmente interesantes y muy bien explicadas, he puesto en practica más de un tutorial sobre wordpress y siempre con éxito. Gracias por eso!
Bueno, esto te lo debia, ahora mi duda: Si yo tuviera una variable de url del tipo…
…para llamar a los distintos archivos, tendría un único menú (en otro include) que se vería asi:
Mi pregunta es, cómo hago para que las urls se vean: dominio.algo/empresa/ sin tener que cambiar los links internos, ya probé con htacces y no lo consigo, incluso probé algunos generadores htacces on line y tampoco resulta. Será que simplemente no se puede.
Gracias por tu tiempo.
Gracias Daniela por tus comentarios.
Ten en cuenta que si quieres que las urls se vean dominio.algo/empresa/ los links tienen que ser así:
o también
Y luego con htaccess haces la conversión a index.php?page=home para que así lo entienda tu código de php.
Excelente. Mis url son amigables. Tengo una consulta,porque a partir de eso es que cuando quiero realizar un sitemap en forma automatica me repite cada carpeta como si fuera la base. por ejemplo alimentiaweb.com/acerca-de-alimentia tambien pone alimentiaweb.com/clientes/acerca-de-alimentia
Cual seria el error?
Gracias
Excelente tus comentarios. Solo deseaba consultarte si en mi portal al hacer click en “ver mas” de una empresa, redirecciona a $emp = “empresa_detalle.php?id=”.$tr['id'] donde id es un numero y la url seria (en el caso de una empresa determinada) empresa_detalle.php?id=124 y deseo aparezca en vez de 124 el nombre de la empresa en este caso EFITECNICA GROUP que debo hacer?
Hola Hector, gracias por tus comentarios.
Si el id va a ser siempre 124 para este caso concreto simplemente sería hacer algo así:
Si el número del id varía no tienes más remedio que incluirlo en la url.
Muy buenas Juan,
estoy intentando utilizar un htaccess para mi web, pero no me funciona con las secciones.
No me da problema en la home, pero cuando intento escribir la url de una sección me da un 404.
Es más sencillo que el tuyo y puede que esté mal porque le falten cosas (y yo no lo sepa)
El código es este:
Una ayudita :’(
Hola Seiya,
¿Qué estás poniendo en el enlace que te lleva a la página?
Hola Juan. Buenísimo el post. Tengo una duda. Cuando haces esto tanto la url antigua como la nueva siguen activas. Es decir que por ejemplo google detectaría contenido duplicado. Se debería por tanto según he leído por ahí hacer un redireccionamiento desde la URL antigua hacia la nueva. Lo estoy intentando hacer pero no me sale. Lo puedo hacer desde php pero preferiría hacerlo con una regla en htaccess. ¿Me podrías por favor echar una mano?.
Gracias de antemano
Gracias Jose,
¿Puedes poner un ejemplo del enlace que usas? Ten en cuenta que la parte de la izquierda es la URL amigable y la de la derecha la real.
Por supuesto:
Gracias
Es decir, la real es la acabada en php como es lógico y la otra la amigable. Muchas gracias por responder.
Hola Jose,
Lo tienes al revés en el htaccess. Ten en cuenta que a la izquierda va la amigable y a la derecha la real. La del .php tiene que ir a la derecha
¿Pero cual de las dos tengo al revés?. Esta me acepta la ulr sin .php así que va bien
y la otra es la que redirecciona y no lo hace bien. ¿Serías tan amable de poner el código como dices?. Gracias y perdona por ser tan torpe.
Perdona Jose por no ser claro. A la izquierda va la amigable (la que no tiene .php) a la derecha va la real (la que tiene .php que es la que entiende tu código). La que no te funciona es la que tienes al revés.
Como la amigable tu código no la entiende por eso la cambias con el htaccess a la que sí entiende.
Ok. ahora entiendo lo que querías decir. Perdona si no he sabido explicarme. El código me va bien, lo que pasa es que con la línea que dices que tengo al revés no quiero hacer lo mismo que antes. Eso ya lo tengo con la primera línea. Es decir si meto tanto la URL amigable como la que acaba en .php ambas me llevan al mismo sitio. Lo que pretendía con la segunda regla era hacer un redireccionamiento. Es por eso por lo que lo tenía al revés, justamente para decirle que si la url acaba en .php redireccione hacia la amigable. Con otras URLS dinámicas si que me va, pero no entiendo porqué se me resiste esta. ¿alguna idea?.
Gracias
Ah ya te entiendo. Para hacer un redireccionamiento tendrías que hacer así:
Si pero así sería si la dirección fuese fija como inmobiliarias.php pero no como inmobiliarias-(.*).php
Acabo de dar con una posible solución que hace lo que quiero, pero es curioso que funciona bien con casi todas las provincias menos con Barcelona, jeh jeh que raro. Este es el código completo:
Hola que tal? estoy aprendiendo sobre mvc y urls amigables y estoy montando un pequeño sistema de gestion de socios para que funcione como intranet para el club de mi barrio que aparte como ayuda a mi club me sirve para aprender un poco, bueno basta de vueltas, lo que pasa es que quiero hacer que se vean urls amigables y no se como encarar, tengo activado mod_rewrite pero no entiendo bien el tema de la expresiones, por ejemplo yo tengo el formulario de ingreso y al ingresar a la pagina principal me sale la siguiente url
me gustaria que esto se vea mas amigable y la verdad no se como encararlo si me dan una mano les agradeceria, saludos cordiales.
Hola Jose, buenas tardes
Estoy con el tema de url amigables, he buscado por todos lados pero no logro hacer que funcione, te paso una ejemplo de mi link :
Necesitaria saber como crear el htaccess, el codigo php puse el siguiente pero tampoco funciona :
Me puedes ayudar con esto??
Gracias
Disculpa, antes tenia el siguiente codigo apuntando al link :
Saludos!
Hola juan, mira mi problema es que mediante una variable en un embed recojo una url pero si coloco esa url en la barra hace descarga directa desde mi host de pruevas podria denegar cualquier descarga desde el .htaccess pero que en el embed reproduciera el archivo…gracias.
Hola, recien me estoy intruyendo en esto del trabajo con .htaccess… me gustaria saber si me puedes hechar luz a lo siguiente:
Tengo una web con las siguientes urls:
La cuestion es que me gustaria cambiar por lo siguiente:
Como deberia escribir esto dentro del .htacess
Hay alguna forma de probar esto antes… por ejemplo trabajando de forma loca.
Muchas gracias.
Martin.
Hola Martin,
Si no tienes ningún parámetro que pasar en el GET puedes hacer un simple redireccionamiento 301 del tipo:
Si los números de la primera URL son parámetros necesarios, tienen que aparecer de alguna manera en la segunda url para podérselos pasar a tu código.
Muy muy muy buen artículo. Me aclaró un montón de dudas y aprendí muchas otras cosas que desconocía. También está explicado de lujo, sin abarrotar de tecnisísmos, para que la gente lo entienda mejor. Mis felicitaciones.
Por otro lado tengo una pequeña duda, a ver si entre varios podemos resolverla.
Tengo una web con la siguiente url: http://www.web.com/?pagename=tus-stars&ficha=id
El .htacces que he creado (solo pongo la parte que he creado yo, lo demás viene de WordPress) es la siguiente:
Pero no me funciona, alguna sugerencia al respecto ?
Gracias !!
Hola a todos… observen la url q bota mi web:
"http://deportivotachira.com.ve/2012/full.php?subaction=showfull&id=1317910374&archive=&start_from=&ucat=1"mi pregunta es ¿como debo modificar el htacces.. quiero q me quede algo asi?
"http://deportivotachira.com.ve/2012/titulo-de-mi-noticia"otra cosa.. este es mi htacces:
AYUDA POR FAVORRR– se los agradecere mil veces mil…
saluds
Hola Gabriel,
He eliminado tu enlace con la info de tu configuración de php porque puede ser inseguro para ti.
Un URL como el que quieres le vas a tener que hacer por PHP. Mediante htaccess tienes que pasar los valores de las dos variables (siempre y cuando estas sean necesarias), que son “subaction” e “id”, tal y como ves en los ejemplos del artículo.
Pingback: URL’S AMIGABLES CON .HTACCESS
Buenas tardes, he utilizado tu tutorial para crear urls amigables en una web que estoy montando en php.
Funciona perfectamente, pero me surge un problema.
Si yo mismo escribo un enlace del tipo:
http://miweb.com/no-existe, en lugar de mandarme al index.php como hacía antes, me salen los mensajes de Warning:no such file etc.Mi pregunta es, en el caso de que no exista la página en un directorio determinado, en este caso miweb.com/pages/x, ¿se puede mandar al usuario al index.php o a la tipica página de error o habría que hacerlo en php en pages.php?
El contenido de mi pages.php (el que saca una página u otra) es:
Le he añadido
para que no salgan los warning, pero lo que me interesa es que cuando salga un Warning, me envíe a una página determinada o bien redirija a 404.
Gracias
Juan, genial aporte una vez más!
Aun así me ha surgido un problema con mi .htaccess. Tengo un directorio en mi web llamado “rss” (cuyo fichero inicial es un index.php) y, con el siguiente codigo .htaccess, no me deja acceder. Debe ser porque supone que es uno de los menús de la web y no un directorio.
Además, con .htaccess, habia protegido el directorio “rss” con contraseña.
¿Habría alguna manera de poder tener ambos códigos en el mismo .htaccess y que no entrasen en conflicto? Quizá con alguna condición previa… no sé muy bien.
Espero vuestra ayuda! Saludos!!
Gracias David!
Si, no te debería dar problemas
Gracias por responder Juan.
Pues aun así, cuando accedo a http://www.dominio.com/rss, me intenta leer el menu rss de una de mis páginas web (como si fuese a empresa, quienes-somos, servicios…) y no a la carpeta rss (dónde dentro hay un archivo index.php que es el que habria de leer tras que el usuario ponga user y pass).
Sabes a que puede ser debido?
Muchas gracias.
Gracias maestro!!! Sos un genio la verdad… no solo me salio esto en 15 minutos, si no que aprendí bastante de como manejar los .htaccess, me sirvió completamente para lo que lo necesita…
Mil gracias!
Saludos desde Argentina ^^
que tal, yo tengo una duda al usar dos o mas reglas
tengo lo siguiente:
se supone que al poner L, buscaría el que mas se parezca, pero a mi no me funciona, la segunda regla parecería que la ignora, ayúdeme por favor
ola juan
solo quiero decirte q esta muy bueno el tutorial q subiste solo q es la primerva vez q copy hace
una url amigable en mi wamp tengo hatcess tengo q modificar mi apache
Hola he seguido los pasos que se dan en este post y funciona de maravilla el problema que tengo es que google no me detecta las paginas y me da error 404 cuando las paginas si que funcionan.
El archivo htacces lo tengo de la siguiente forma
Que raro, porque al fin y al cabo lo de Google no es más que un enlace… La URL a la que apunta Google es la misma que tu ves que está funcionando?
Si son las mismas
Lo mas curioso es que ahora me he dado cuenta de que con esta da error 404
http://www.valenciaclick.es/LLanera-de-Ranes/129.html
Y con esta todo va bien
http://www.valenciaclick.es/Villar-del-Arzobispo/56.html
Al aplicar la reescritura de mis URLs se pierde la relación de los CSS y los JS, como puedo manejar esto???
no puedo recuperar la variable, haber lo explico rapido.
tengo 2 archivos index y clientes.php tengo el httacces con el codigo q pusieron
en index tengo un link
en clientes tengo un
porque no me imprime nada $id ??
hola bien e llegado a tu web buscando ayuda este es mi problema no se si puedas ayudarme
mi web es asi
lo que quiero es esto
lo de paginas son difententes cosas es la carpeta de las paginas php
como iria en el .htaccess ps necesito algo de ayuda es algo simple pero ayuda es lo k necesito
Hola,
Es muy bueno este post. Quería ver si me puedes ayudar.
Tengo el .htaccess configurado y funcionando, pero me encuentro con un problema.
La redirección es
El problema es que cualquier url con el minimo de info correcta me lleva a la url redirigida
Esto no está mal, pero me gustaría, como hace El Pais.es por ejemplo, que cuando se haga la redirección en la barra del navegador se restablezca la correcta…
¿Eso se puede hacer?¿cómo?
Muchas gracias!
Tengo el htaccess funcionando de maravilla, el único problema es que se pierden los estilos, el javascript y la imagenes. Puedo suponer que eso se debe a que no está interpretando las rutas de manera correcta.
Ya varios hicieron esta pregunta y nadie ha respondido.
¿Cómo se soluciona este problema?
Gracias.
Como nadie supo responderme porque se perdían los estilos, pues tuve que solucionarlo por mi cuenta, y esto fue lo que encontré:
Mi archivo htaccess tenía esto:
en mi link ponía esta ruta:
y la pagina se cargaba sin estilo, imagenes ni javascript, así que lo que hice fue cambiar mi htaccess a esto:
Al parecer la barra (/) al final provoca una mala interpretación de las rutas, aunque no estoy seguro de que ese sea el motivo. Lo que si me parece interesante es que WordPress si usa la barra al final y todo funciona bien.
En fin, al menos funcionó.
Hola amigo, en primer lugar gracias por el tutorial, pero me gustaría hacerte una pregunta:
Quiero dejar las url sin indentificador de producto, es decir que en lugar de aparecer “/333-producto..”. aparezca simplemente “/producto…”
Según veo el funcionamiento de PrestaShop no se si esto se podrá hacer y además en el sitio que tengo el problema la importación se hace directamente desde los productos reales de la tienda, con lo cual los identificadores que quedan son bastante largos.
Me gustaría minimizar en lo posible el problema y por lo menos poder poner los indentificadores al final de la url.
Hola,
Si, eso con Prestashop no vas a poder hacerlo facilmente, requeriría cambiar muchas cosas del core y que las URLs no se generaran a través del htaccess sino a través de PHP. El problema es que ese “333″ es el id del producto, es decir, lo único importante de esa URL para que el código sepa de qué producto estamos hablando.
Hola Juan, primero que nada darte las gracias por el artículo que está excelente. Ahora tengo una consulta para realizarle y es que tengo un problema de visualización.
Por ejemplo si visualizo así: miweb.com/marcas/nokia en ese caso se pierde el estilo de la página y no encuentra las imagenes ni nada.
Ahora si visualizo así: miweb.com/marcas-nokia en ese caso se ve todo correctamente.
Mi archivo htaccess es el siguiente:
Muchas gracias por su tiempo!