URL’s amigables con .htaccess

14 01 2008

Una de las características más importantes de htaccess es la posibilidad de permitir crear URL’s amigables para los motores de búsqueda. Una de las características de los lenguajes de scripting para el Web es que permiten automatizar funciones para la publicación de contenido en el sitio. Este procedimiento se hace muchas veces a través del paso de parámetros, generalmente por el método GET. Pues bien, asumiendo que esta introducción ya ha sido bastante comentada en otros artículos veamos los pasos para crear URL’s amigables con htaccess:

Paso 0: lo defino como paso 0 por que es una precondición que podemos tomar en cuenta a la hora de trabajar con la manipulación de URL’s. En este paso, lo que se propone es establecer que las condiciones de reestructuración afectarán solo a determinados tipos de archivos.

# Siempre iniciamos con estas intrucciones
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

Para continuar, es importante recordar que para el uso de estas características es fundamental que el servidor este compilado con el módulo MOD_REWRITE.

Paso 1: antes de iniciar la reescritura de URL es necesario que usted sepa utilizar Expresiones Regulares. Las Expresiones Regulares nos ayudan a no tener que escribir cada regla por cada archivo que queremos “reescribir”. Un buen sitio donde aprender a utilizar Expresiones Regulares es: RegularExpressions.info. También, prepararé en el futuro un tutorial sobre Expresiones Regulares.

Pues bien, con estos dos puntos abarcados, podemos iniciar este tutorial de Reescritura de URL’s. En este primer ejemplo se condiciona que toda petición que tenga como dominio ‘domain.com’ entre a las reglas de reescritura. Dentro de la directiva RewriteRule, se indica que toda petición al dominio sea rediccionado a ‘domain2.com’. La partícula [R=301,L] indica literalmente: Redirección Permanente (Status 301), Última Regla para denotar que las que siguen, indican otras condicionantes.

# Sitio movido a otro sitio permanentemente
# domain.com a domain2.com
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(\.)$ http://www.domain2.com/$1 [R=301,L]

El siguiente ejemplo nos muestra una regla mas sencilla. En esta solamente, indicamos que el archivo ‘domain.com/page.htm’ direcciona a ‘domain.com/new_page.htm’. Las RewriteCond FLAGS indican rediccionamiento, que se tome sin Case-sensitive y que esta es la última regla.

RewriteRule ^page$ new_page.htm [R,NC,L]

Podemos crear varias lineas de condiciones, cuando usamos las variables de servidor, como en el primer ejemplo. Generalmente, usaremos la partícula [L] por cada línea para denotar única regla.

Los siguientes dos ejemplos son más complejos y denotan la reescritura de parámetros a estructuras de directorios. En el primer caso seria algo como: cualquier nombre sea el valor del atributo name para ‘categories.php’. El segundo es similar, solamente que incluye una segunda variable. En este se indica que todo aquello que sea para el directorio ‘/articles/’ y que tenga dos niveles será interpretado como ‘titulo’ y ‘pagina’.

# domain.com/category-name-1/ a
# domain.com/categories.php?name=categorie-name-1
RewriteRule ^([A-Za-Z0-9-]+)/?$ categories.php?name=$1 [L]

# domain.com/articles/title/5 a

# domain.com/articles.php?name=title&page=5
RewriteRule ^articles/([A-Za-Z0-9-]+)/([0-9]+)/?$ articles.php?name=$1&page=$2 [L]

Los ejemplos han sido algo básicos pero principalmente se han debido a que no he deseado extender tanto el artículo. Pero como agregado les puedo decir que lo principal sería contar con una copia de: ModRewrite Cheatsheet, disponible desde el sitio de I Love Jack Daniels.

Artículos Relacionados


Acciones

Information

6 responses

17 03 2008
Bolmey

hola!!
tengo unproblema a ver si me pueden ayudar…
pq cuando uso esta regla cuando cuando me levanta la pgina lo hace sin los archivos .js y .css incluidos previamente…
gacias de antemano!!!!

RewriteEngine on
RewriteBase /
RewriteRule ([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/?$ /principal.php [L]

14 12 2008
okocha

estaba zapeando esta pagina algo que buscaba pero no lo halle

1 08 2009
Webmaxter

Para que te aparezcan los css, js y las imágenes utiliza rutas absolutas:

/imagenes/imagen1.jpg en lugar de imagenes/imagen1.jpg

Saludos.

7 05 2010
Chema

Hola que tal, me gustaría saber como redireccionar 301 este tipo de urls

/mostrarrestauranteseleccionado.php?Id=40&Restaurante=Don%20Camar%F3n

a tipo

/restaurante/Restaurante-Don-Camaron

Gracias por la ayuda

10 06 2010
messi

Hola,
uso wordpress y tengo un problema con las redirecciones:
espero que alguien pueda ayudarme.
Tengo la siguiente direccion:
misitio.com/?r_sortby=highest_rated&r_orderby=desc
y quiero dirigirla a misitio.com/top
supongo que no funciona porque existen otros parametros como:
misitio.com/page/2?r_sortby=highest_rated&r_orderby=desc
misitio.com/page/3?r_sortby=highest_rated&r_orderby=desc
etc…
a dirigir
misitio.com/top/page/2
misitio.com/top/page/3
Que codigo debo poner para que funcione?
he probado con: RewriteRule ^top/([A-Za-Z0-9-]+)/([0-9]+)/?$ $1?r_sortby=highest_rated&r_orderby=desc [L] pero no me funciona!!
Agradeceria su ayuda, ando un poco perdido, gracias!

22 09 2010
Ivannz

hola amigos quisiera saber si en esta linea

RewriteRule ^articles/([A-Za-Z0-9-]+)/([0-9]+)/?$ articles.php?name=$1&page=$2 [L]

lo que hace esto ([A-Za-Z0-9-]+)/([0-9]+)

es hacer algo asi…

articles/hola-un-ejemplo-de-url-xD/50

Algo asi??

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: