Jump to content

Como enmascarar enlaces url web permanentes con htaccess en servers apache


Alejo
 Share

Publicaciones recomendadas

 

Mod Rewrite de Apache

 

 

El Mod Rewrite es un módulo para el servidor Apache que sirve para reescribir las direcciones url. En este artículo se han seleccionado algunos ejemplos de reglas que suelen ser habituales. Estas reglas se deben guardar en el archivo .htaccess del directorio de nuestra web.

 

La página se ha movido temporalmente

 

Esta regla es muy útil cuando queremos cambiar la dirección de una página temporalmente.

 

RewriteRule ^web.php$ nuevapagina.php [R,NC,L]
^ indica que es el inicio de una cadena

$ indica el fin de la cadena.

R significa que se redireccionará hacia la página destino.

NC no importan las mayúsculas o minúsculas (case insensitive).

L quiere decir que es la última regla (A veces se pueden definir grupos de reglas).

 

Reescribir Urls

 

Esta regla sirve para que apache convierta direcciones estáticas a dinámicas, útil para la indexación de nuestros sitios en los buscadores.

 

RewriteRule ^([a-zA-Z0-9\-]+)/?$ script.php?parametro=valor&nombre=$1 [L,NC]

 

([a-zA-Z0-9\-]+) significa que se acepta cualquier palabra que contenga esos caracteres o números.

/? significa que la barra (/) es opcional, y también se aceptaría una url sin este caracter

 

Todas las direcciones que cumplan con esta regla se dirigirán a la dirección especificada script.php...

$1 es el valor del primer parámetro.

 

Ejemplo de Paginación con Mod Rewrite

 

Este ejemplos es muy parecido al anterior. Es el caso en que tenemos que paginar resultados y queremos que nuestras direcciones url también sean estáticas.

 

RewriteRule ^([a-zA-Z0-9\-]+)/([0-9]+)/?$ script.php?parametro=valor&nombre=$1&numpagina=$2 [L,NC]

 

([0-9]+) significa que sólo se aceptan números.

$2 es el valor del segundo parámetro.

 

ENMASCARAR Y MEJORAR UNA URL DE UN MISMO DOMINIO

 

Existen una solucion más sencilla para enmascarar enlaces y en solo una linea. ¿Cómo? Usando htaccess, un archivo de configuración de directorios de Apache, dentro de este archivo podemos añadir una serie de directivas que nos permitirá entre otras cosas tener url amigables y redireccionamientos.

 

 

El archivo htaccess es un fichero de texto que se llama .htaccess, es decir, su nombre comienza con un punto. Se puede crear con cualquier editor de textos y se coloca en el directorio donde deseamos que afecten las configuraciones indicadas dentro del fichero. Si lo colocamos en el directorio de publicación raíz del dominio, afectará a todos los directorios del dominio, pues este archivo modifica el directorio que lo contiene y todos los subdirectorios.

 

El mecanismo para crear unas redirecciones pensadas para un mejor posicionamiento en buscadores es el siguiente. En el archivo .htaccess se define una regla de redirección interna, con esta sintaxis:

 

RewriteRule url_patron url_destino

 

RewriteRule es la instrucción para definir una redirección, que recibe dos parámetros: url_patron y url_destino. En el primero se especifica una URL patrón. Cuando la dirección a la que se está accediendo cumple el patrón indicado en url_patron, se redirecciona internamente hacia la URL de destino url_destino. La página se procesa en el archivo indicado en url_destino.

 

El patrón es una expresión regular que corresponde con un conjunto de URLs posibles. Cuando el visitante intenta acceder a una URL que cumple esa expresión regular, internamente se procesa la página a través de la url_destino. Decimos que es un proceso interno, porque nadie se entera que la URL se está procesando a través de otro archivo, pues la dirección que aparece en el navegador siempre será la original y los buscadores no podrán detectar que Apache ha realizado una redirección interna para procesar la página.

 

Así pues, para los visitantes y los buscadores que indexen los contenidos de nuestra web, las direcciones que están accediendo son las amigables para buscadores, a pesar que en realidad esos documentos no existan dentro de la estructura de directorios del servidor y el procesamiento real de la página se realice en otra URL de destino.

 

Un ejemplo de instrucción RewriteRule podría ser el siguiente:

 

RewriteRule ^articulos/(.+).php codigo/ver_articulo.php?nombre=$1

 

Como se ha dicho, la primera parte es el patrón que debe cumplirse para que se realice la redirección interna. Dicho patrón es una expresión regular que tiene una sintaxis especial.

 

 

La dirección que se está accediendo en el servidor (URL) tiene que concordar con la expresión regular para que se realice la redirección. En la primera parte de la instrucción RewriteRule del ejemplo indicado anteriormente teníamos esta expresión regular:

 

^articulos/(.+).php

 

Para explicar esta expresión regular creo que es mejor verla por partes.

 

La primera parte sería "^articulos/". Esto quiere decir todas las URL que comiencen por "articulo/" (la palabra artículo seguida de una barra). El carácter ^ significa el comienzo de una expresión.

 

La segunda parte es (+.). El "+" significa una o más repeticiones de algo. El "." significa cualquier carácter, luego "+." significaría uno o más repeticiones de cualquier carácter, es decir, cualquier conjunto de uno o más caracteres. El paréntesis sirve para agrupar expresiones. Luego veremos para qué nos puede servir esa agrupación.

 

Por último, en la expresión regular tenemos ".php". La contrabarra es un carácter de escape que sirve para que el "." siguiente no sea considerado como cualquier carácter, sino como un punto sin más. Entonces, esto quiere decir ".php".

 

En conjunto la expresión regular significa cualquier cosa que empiece por "articulos/", seguido de cualquier carácter o conjunto de caracteres, seguido de ".php".

 

Con esta expresión regular concordarían URLs como estas:

 

articulos/loquesea.php

articulos/otra-cosa.php

articulos/1234-xx_zz.php

 

 

REGLAS PRACTICAS DE ENMASCARAMIENTO

 

Patrones de expresiones regulares para htaccess.

 

Regla htaccess

 

RewriteRule ^platos/pais_([a-zA-Z_-]+).php$ codigo/platos_pais.php?nombre_pais=$1

 

Esta regla es similar a la anterior, pero ahora sí que estamos aceptando que algunos caracteres del nombre del país vengan en mayúsculas. Por ejemplo, acepta estas URLs:

 

http://www.midominio.com/platos/pais_Espana.php

http://www.midominio.com/platos/pais_Reino-Unido.php

 

Que redirigiría a URLs como estas:

 

http://www.midominio.com/codigo/platos_pais.php?nombre_pais=Espana

http://www.midominio.com/codigo/platos_pais.php?nombre_pais=Reino-Unido

 

Regla htaccess

 

RewriteRule ^platos/nombre_([a-zA-Z0-9_-]+).php$ codigo/platos_nombre.php?nombre=$1

 

Esta regla .htaccess complica todavía un poco más la regla anterior, con la posibilidad que también se pongan números en la expresión.

 

Redigirirá URLs como estas:

 

http://www.midominio.com/platos/nombre_paella.php

http://www.midominio.com/platos/nombre_PAELLA_2.php

http://www.midominio.com/platos/nombre_paella-mariscos.php

http://www.midominio.com/platos/nombre_Arroz3Delicias.php

 

Que enviará internamente el procesamiento de esas páginas a estas direcciones:

 

http://www.midominio.com/codigo/platos_nombre.php? nombre=paella

http://www.midominio.com/codigo/platos_nombre.php? nombre=PAELLA_2

http://www.midominio.com/codigo/platos_nombre.php? nombre=paella-mariscos

http://www.midominio.com/codigo/platos_nombre.php? nombre=Arroz3Delicias

 

Regla htaccess

 

Este esquema visto en el anterior ejemplo lo podemos repetir las veces que queramos en URLs que tengan una serie de directorios, separados por barras. Será algo como esto:

 

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+).html$ codigo/mascodigo/procesamiento.php? parametro1=$1&parametro2=$2&parametro3=$3

 

Esto acepta direcciones que tengan tres directorios distintos, uno detrás de otro, separado claro está por las barras. Los nombres de los directorios aceptan números, letras mayúsculas y minúsculas y guiones medios y bajos.

 

Acepta direcciones tan variadas como estas:

 

http://www.midominio.com/1/2/3.html

http://www.midominio.com/loquesea/OTRACOSA/122.html

http://www.midominio.com/a_b_c_1/A-B-C-2/A-b_C_987.html

 

Internamente, htaccess procesará esas reglas y redirigirá a url como estas:

 

http://www.midominio.com/codigo/mascodigo/procesamiento.php? parametro1=1&parametro2=2&parametro3=3

http://www.midominio.com/codigo/mascodigo/procesamiento.php? parametro1=loquesea&parametro2=OTRACOSA&parametro3=122

http://www.midominio.com/codigo/mascodigo/procesamiento.php? parametro1=a_b_c_1&parametro2=A-B-C-2&parametro3=A-b_C_987.

 

 

PASO DE PARAMETROS

 

 

En algunas ocasiones no basta con enviar un parámetro para que la página reciba todos los datos que necesita para mostrar los contenidos específicos.

Si en la expresión regular tuviéramos otros (+.) entonces en la url_destino tendríamos que utilizar $1 para el primer (+.) que haya en la expresión regular y $2 para el segundo, $3 para el tercero y así sucesivamente.

 

Por ejemplo, aquí podemos ver una sentencia RewriteRule que utiliza dos partes con (+.) para hacer el patrón.

 

RewriteRule ^agenda/(.+)/(.+)\.html codigo/cita.php?mes=$2&anio=$1

 

Esta expresión regular quiere decir: Cualquier URL que comience por "agenda/", seguida de cualquier cosa, luego una barra y cualquier otra cosa, acabado en ".html" (fijarse la contrabarra antes de ".html" que es un carácter de escape para indicar que el "." de antes de "html" es un punto, en lugar del codigo especial que suele significar cualquier caracter. Ver el artículo anterior para más explicaciones sobre las expresiones regulares de este estilo.

 

Como se puede ver, las direcciones estáticas amigables a buscadores no tienen por que finalizar en .php. En este caso finaliza en .html, pero podría acabar de cualquier otra forma, como .htm, .php3, .shtml o en un directorio.

 

En el caso del ejemplo anterior, una dirección con esta forma:

 

http://www.dominio.com/agenda/2006/7

 

Se hará corresponder con una url_destino así:

 

http://www.dominio.com/codigo/cita.php?mes=7&anio=2006

 

Aunque también podrían haber concordado otros modelos de direcciones como:

 

http://www.dominio.com/agenda/05/01

http://www.dominio.com/agenda/2006/marzo

 

Será nuestra responsabilidad hacer el tratamiento para que sólo las URL que queremos muestren la página correcta. Veremos en el proximo capítulo cómo hacer este tratamiento de posibles errores y cómo resolver otros posibles problemas del uso del htaccess.

 

 

 

 

Fuentes: google, webtaller, desarrolloweb, webtutoriales

  • Upvote 3
  • Thanks 1
Enlace al comentario
Compartir en otros sitios web

  • 2 weeks later...

Te dejo info de un Sitio personal de Victor Bracco [Desarrollador Web]

 

El archivo .htaccess es un simple archivo de texto que Apache usa para tener algunas reglas sobre los directorios y los archivos. Resumiendo, este contiene determinadas directivas que obligan al servidor de web a actuar según los usuarios, así como a definir otras reglas para los documentos.

 

Las características más utilizadas por los desarrolladores de sitios web, son aquellas que ayudan a la optimizacion de las url, control de trafico en una web, bloqueo de usuarios, y algunas otras que ya iremos viendo paso a paso.

 

Aunque también existen muchisimas funcionalidad que pueden aplicarse, pero desde ya para usuarios algo más avanzados. Si necesitan más información deberás ingresar directamente al tutorial de Apache y extraer los datos de la fuente original.

Primera regla

 

El uso que la mayoría de los webmasters le da al .htaccess, es la posibilidad de optimizar el nombre de sus URLs, ocultando tediosas variables, que a Google no le gustan mucho.

 

El ejemplo mas solicitado de este problema, es el que presentan los portales prefabricados, como PHP-Nuke, Xoops, y muchos otros, donde cada sección de la página, se accede a traves de una larga fila de variables, que resultan imposible de memorizar, tanto para nosotros, como para la mayoría de los buscadores.

 

Si quisieramos ocultar algunas variables, tendríamos que hacer algo como esto:

 

RewriteEngine on

RewriteRule seccion/([_0-9a-z-]+)/([_0-9a-z-]+)/ pagina.php?var1=$1&var2=$2

 

Con este pequeño ejemplo, le estamos diciendo a nuestro servidor, que cuando alguien solicite la url: seccion/recomendanos/10, tendrá que abrir en realidad: pagina.php?var1=recomendanos&var2=10

 

El formato [_0-9a-z-] significa que puede esperar letras, números y guiones (bajo y medio), y el + a costado de la regla, indica que cada valor dado, debe tener como mínimo, un carácter de largo.

 

También es posible reglas de la siguiente manera:

 

[0-9]: solamente números.

[0-9]{4}: números de 4 cifras.

([0-9]{1,2}: números de 1 y 2 cifras.

(.*): cualquier expresión.

[a-z]: solamente letras.

[a-z]{1,10}: palabras entre 1 y 10 caracteres.

 

Si por alguna razón, cuando subes tu htaccess a tu sitio web, este presenta un Error 500, es porque alguna de las reglas que has escrito, presenta errores de sintaxis y hasta que no lo modifiques, no podrás acceder a tu sitio correctamente.

Personalización de Errores

 

La forma de personalizar los que ofrecen los exploradores es bastante fácil. La sintaxis es bastante básica, y acá va un ejemplo para personalizar el bendito Error 404 - “Pagina no Encontrada”.

 

Redirección Local

 

RewriteEngine On

ErrorDocument 404: error404.php

 

Redirección Externa

 

RewriteEngine On

ErrorDocument 404: http://www.otrapagina.com/arhivo.php

 

En este archivo error404.php o archivo.php (le podes poner el nombre que quieras) estará el contenido que vos quieras que se muestre cuando alguien llegue a ese error en tu página.

 

Esta es quizás la regla más utilizada por los desarrolladores de sitios webs, pero se pueden personalizar todos los errores, y creanme que son muchos. :D

También se puede optar por mostrar un mensaje de error emergente, si cambiamos el dirección de nuestro archivo, por el mensaje entre comillas (”mensaje”).

 

RewriteEngine On

ErrorDocument 404 "La pagina solicitada no existe"

 

Siempre que estemos personalizando errores de la pagina tiene que ir la directiva ErrorDocument seguida del código del error.

Hot Link

 

El hot linking, es lo que se produce cuando desde nuestra pagina, linkeamos imagenes, videos, etc, que están publicados sobre otra página, o lo que es peor, sobre un servidor a cargo de otra persona, lo que equivale a un hurto de su trasferencia mensual, que se traduce como un gasto muy grande en el servicio de hosting.

 

Podemos impedir que estos usuarios tengan links (generalmente img) sobre sus paginas, con nuestros archivo, si colocamos esta pequeña regla:

 

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www\.)?vbracco.com.ar(/)?.*$ [NC]

RewriteRule .*\.(gif|jpg|jpeg|bmp)$ http://www.vbracco.com.ar [R,NC]

 

Con esto, le decimos al servidor, que la única forma de mostrar las imagenes de nuestro sitio, es que el HTTP REFERER sea nuestra propia página. De cualquier otra forma, se mostrará la molesta X sobre la imagen, como si no existiera.

 

Podríamos incluso, en vez de mostrar la X de error, disponer una imagen en blanco, o lo que nosotros quisieramos para mostrar cada vez que se linkee una imagen desde otro sitio.

 

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www\.)?vbracco.com.ar(/)?.*$ [NC]

RewriteRule .*\.(gif|jpg|jpeg|bmp)$ images/nohotlink.jpg [L]

 

También, podemos descartar o agregar extensiones de archivos que no quieres que te linkeen, como archivos de video o de sonido, pero siempre con la barra separadora |.

 

Lo que no podemos hacer, es redireccionar una imagen en hot link, a una pagina web, ya que daría error de inconsistencia.

  • Upvote 2
  • Thanks 1
Enlace al comentario
Compartir en otros sitios web

Verdadero tema a estudiar cuando encontramos que queremos salir del estandard que nos traen por defecto las configuraciones de Apache. Muchisima informacion la podemos encontrar dentro de su sitio oficial, www.apache.org especialmente en los apartados de modrewrite, pero ya tienen que tener ganas de entender este tema para llegar a este punto, porque van a necesitar concentrarse, tener paciencia y leer atentamente demaciada informacion, ya que com bien explican las posibilidades de Apache sin increibles.

 

Pero para simplificar el concepto, en la web de comocrearunsitioweb explican muy facil el concepto de hacer mas amigable una URL que tiene demaciados parametros de PHP. Interesante para empezar

 

Los buscadores le dan importancia a las url y los lenguajes de programación web como PHP no generan urls muy amigables para los motores de busqueda.

Si las url de nuestra web se ven parecidas a esto: "ejemplo.com/index.php?variable=1&otravariable=2&variabletres=3" claramente debemos cambiarlas para que se vean así: "ejemplo.com/1/2/3/".

 

Una forma para lograr esto es con el mod_rewrite y .htaccess, un módulo de apache que reescribe las URLs de nuestra pagina web y las hace amigables para los buscadores.

 

Para que funcione nuestro proveedor de hosting debe tener habilitado dicho módulo y soporte para archivos .htaccess (cualquier servidor bajo linux debería tenerlo).

 

[h=2]Como hacer que nuestras URL sean amigables a los buscadores[/h]Si ya comprobamos que nuestro hosting soporta archivos .htaccess y tiene el mod_rewrite activado, haremos lo siguiente:

1-. Creamos un archivo vacio .htaccess en el directorio principal de nuestra pagina web y escribimos:

Options +FollowSymLinks

RewriteEngine on

 

Estas dos lineas activan el motor y lo dejan listo para recibir las reglas de reescritura.

2-. Las reglas de reescritura tienen el siguiente formato:

RewriteRule ^URLamigable URLdestino [flags]

 

En el parametro URLamigable definiremos la estructura de la url reescrita, y el parametro URLdestino es la URL actual, donde mirará URLamigable.

Por ejemplo, si tenemos una URL del tipo: "ejemplo.com/index.php?producto=cama-colchon" y queremos que se vea así "ejemplo.com/cama-colchon" deberemos escribir:

RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?producto=$1 [L]

 

Pero si queremos definir una base para esa URL y que se vea así "ejemplo.com/productos/cama-colchon", haremos esto:

RewriteRule ^productos/([A-Za-z0-9-]+)/?$ index.php?producto=$1 [L]

 

Al principio puede parecer complicado, pero si se estudia detenidamente puede llegar a ser muy fácil.

  • Upvote 2
  • Like 1
Enlace al comentario
Compartir en otros sitios web

Ahora ya que estan mas interesados en el tema, les dejo una mejor explicacion por parte de la gente de Rechechando.com

 

 

[h=1]Reescribir direcciones con mod_rewrite de Apache[/h]Muchas veces, cuando estamos haciendo páginas web, nos interesa tener URIs lo más limpias que sea posible; no ya porque te indexen mejor los buscadores o porque queden más bonitas, sino porque un usuario normal, por lo general, va a recordar más fácilmente una dirección de este tipo, con lo que le será más fácil volver a nuestra página.

Para esta tarea se suelen usar archivos .htaccess del servidor HTTP Apache junto con el módulo de reescritura del mismo (el mod_rewrite). El mod_rewrite es una pequeña extensión de Apache que nos permite que, al visitar una dirección de una página, realmente se está llamando a otra diferente.

[h=2]Funcionamiento[/h]Apache usa archivos con el nombre de .htaccess (que no es que tengas que poner nombre.htaccess, sino simplemente eso, .htaccess) para que el administrador de las páginas web (que no del servidor) pueda definir una serie de parámetros de configuración para su espacio. Deben estar ubicados en el directorio sobre el que quieras aplicar esa configuración.

Crear archivos de este tipo en plataformas Microsoft Windows puede ser un problema, ya que el famoso "sistema operativo" no te deja poner archivos sin nombre (solo tiene extensión) pero ello no significa que no se pueda hacer.

El archivo se puede crear de varias maneras, yo recomiendo PHP ya que es muy fácil de hacer. Simplemente con poner algo como lo siguiente nos debería crear el archivo:

<?php

touch('.htaccess');

?>

Antes de seguir adelante debemos comprobar que podemos usar los archivos .htaccess y que tenemos el mod_rewrite activado.

 

Comprobar que podemos usar .htaccess es bastante sencillo, basta con crear un archivo con ese nombre y poner en el una cadena aleatoria (tipo "asdasd123") y guardarlo en el directorio sobre el que queremos aplicar la reescritura. Si el servidor nos devuelve un Internal Server Error es que todo ha ido bien, podemos usarlos.

 

Para comprobar que tenemos el mod_rewrite podemos hacer un phpinfo() (si disponemos de PHP en el servidor). Si Apache está como módulo de PHP entonces podemos mirar los módulos que tiene cargados; muy posiblemente el mod_rewrite está entre ellos.

 

Para empezar deberemos poner al principio del documento (me refiero al .htaccess) la cadena RewriteEngine On, que se encarga de activar el módulo de reescritura, tras poner esto ya debemos poder empezar a escribir nuestras reglas para formatear las direcciones como nos plazca. A veces puede ser necesario poner un Options FollowSymLinks antes para que funcione, de modo que quedaría así:

 

Options FollowSymLinks

RewriteEngine On

Si te ha fallado alguno de los pasos o no estás seguro de si tienes activado el mod_rewrite siempre puedes consultarle al administrador de tu sistema.

[h=2]Funciones o comandos del mod_rewrite[/h]Hay varias funciones (o comandos) que usaremos a menudo y debemos conocer para escribirlos sin tener que recurrir al manual cada vez. La sintaxis de los comandos del mod_rewrite es bastante sencilla y rápida de entender. Los comandos empiezan con Rewrite. Normalmente el patrón es el siguiente:

 

Comando Parámetro1 Parámetro2

Aunque en algunos casos varía ligeramente, como se verá a continuación:

[h=3]RewriteEngine[/h]Solo acepta dos valores para su único parámetro: On y Off. Le dice a Apache una vez puesto en el .htaccess si debe o no iniciar el motor de reescritura. Está desactivado por defecto.

#Para activar la reescritura

RewriteEngine On [h=3]RewriteBase[/h]Nos permite ajustar una "base" para las rutas que escribamos a partir de que se usa. Lo que hace es añadir a las rutas siguientes el prefijo que indiquemos, esto puede ahorrar mucho espacio y es necesario muchas veces al no encontrarse el archivo .htaccess en el mismo directorio sobre el que se quiere aplicar (por eso es recomendable ponerlo ahí).

 

RewriteRule ^/pagina/index.xml$ /pagina/xml.php?generar=xml

#Con RewriteBase nos podemos ahorrar el /pagina/ de la siguiente forma:

RewriteBase /pagina/

RewriteRule ^index.xml$ xml.php?generar=xml [h=3]RewriteCond[/h]Con esto se pueden definir sentencias condicionales, la sintaxis es muy simple y fácil de entender. Se pueden unir varias condiciones con el modificador OR.

 

A continuación de este comando se debe poner o bien otro RewriteCond (usando el modificador para unirlos) o bien un RewriteRule, que es el que se debe ejecutar en última instancia en caso de cumplirse la(s) condicion(es). En caso de no cumplirse la condición el RewriteRule sería ignorado.

 

#RewriteCond Cadena Patrón

#Si la dirección contiene "pepe" se ejecuta el RewriteRule que habría debajo

RewriteCond %{REQUEST_URI} pepe [h=3]RewriteRule[/h]Posiblemente este sea el comando que más usaremos. Es el pilar para lo que queremos hacer, ya que de el depende que se lleve a cabo la reescritura.

 

Lo que hace es simple: le das un patrón y una URI de destino, si el patrón coincide se llama a la URI especificada con los parámetros que hayas indicado, etcétera. Las referencias hacia los valores agrupados con paréntesis en las expresiones regulares del patrón pueden ser referidas como $1, $2… hasta $9.

 

Aquí es donde las expresiones regulares juegan un papel importante, al ser con lo que haremos los patrones de comparación. Es importante conocer su sintaxis básica y poder manejarse con soltura para crear reglas efectivas.

[h=2]Modificadores de RewriteRule[/h]Esto son las flags de las que se habla en el manual oficial, a falta de una traducción mejor o más certera (banderas me parece cutre) he decidido referirme a ellas como modificadores. Los modificadores sirven para añadir características extra a ciertos comandos del mod_rewrite, como RewriteRule o RewriteCond.

 

Cada comando tiene sus propios modificadores. Se ponen entre corchetes, tras un espacio al final del comando y se separan (en caso de especificar más de uno) con comas y sin espacios.

 

Hay varios y no los explicaré todos, ya que para eso está el manual oficial, solo expondré los pertenecientes a RewriteRule que me parecen más útiles para lo que estamos haciendo.

 

Por encima, los modificadores que más nos interesan son los siguientes:

[h=3]nocase (NC)[/h]Este útil modificador hará que las expresiones regulares (o simplemente cadenas literales) que pongamos como patrón sean case-insensitive, es decir, que no se distinga entre mayúsculas y minúsculas. Esto nos puede venir bien muchas veces.

[h=3]redirect (R[=codigo])[/h]Permite redireccionar a una dirección con un código concreto de respuesta del protocolo HTTP. El rango, según el manual oficial, debe estar entre el cñodigo 300 (HTTP_MULTIPLE_CHOICES) y 400 (HTTP_BAD_REQUEST). Para conocer el significado de esas constantes y los códigos que puedes usar debes consultar este protocolo.

 

Suele interesar que, al redireccionar por este metodo, el archivo .htaccess no siga siendo interpretado, para lo que usaremos el modificador L.

Por defecto, si no se especifica un codigo, se pone automáticamente el 302 (MOVED TEMPORARILY).

[h=3]last (L)[/h]Este modificador hace que la condición, en caso de que se cumpla, sea la última en interpretarse del archivo. En caso de no cumplirse seguirá su curso normal. Es bueno especificarlo casi siempre, ya que le va a ahorrar a Apache la interpretación del resto de reglas.

[h=2]Construcción de reglas o patrones[/h]Puedes construir tantas reglas como quieras, pero ten en cuenta que, cuanto más pesado el archivo, más le costará de interpretar a Apache. No recomiendo que pases de los 2KB (que ya es mucho).

 

Se usan patrones basados en expresiones regulares (de tipo POSIX a partir de Apache 1.2.x) de manera que, si coinciden, se redirija al archivo que especifiquemos. Es realmente simple crear expresiones regulares para hacer las URIs como las de esta página. Dos buenos manuales para aprender a hacer expresiones regulares efectivas son los siguientes:

Es muy importante que delimitemos el rango de caracteres correcto acorde a nuestras necesidades. Si necesitamos obtener un número… ¿para que permitir letras u otros símbolos en el patrón? Esto nos ahorrará quebraderos de cabeza posteriores en lo referente a la seguridad de la aplicación final.

 

También suele ser necesario que, en las direcciones que puedan terminar con o sin barra, indiquemos esta eventualidad (es decir, que pongamos la barra del final como caracter opcional), algo como lo siguiente:

 

RewriteRule ^seccion/([0-9]+)/?$ index.php?seccion=$1 Si se diese el caso de que la barra opcional no está contemplada y es escrita en la dirección se lanzaría un error de tipo 404 (Página no encontrada).

[h=2]Ejemplos de la vida real[/h]Hasta ahora se ha intentado enseñar lo básico sobre esta extensión y como funciona. Ahora que comprendemos un poco como va podemos poner unos ejemplos ambientados en la vida real.

 

Lo que vamos a hacer en el siguiente ejemplo es obtener y enviar un identificador numérico a partir de una URL de tipo example.com/articulo/identificador_numérico, o sea, coger el número y pasárselo a una aplicación:

 

RewriteEngine On

RewriteRule ^articulo/([0-9]+)/?$ articulos.php?id=$1 [L]

Si quisiésemos obtener el nombre de la sección de ese artículo (a partir de una dirección tipo

 

example.com/articulo/sección/identificador_numérico) sería muy sencillo también:

 

#La sección puede contener letras, guiones y guiones bajos

 

RewriteRule ^articulo/([a-z_-]+)/([0-9]+)/?$ articulos.php?seccion=$1&id=$2 [NC,L] Ojo porque el identificador ya no está en $1, sino en $2, ya que es el segundo grupo de captura que hemos indicado. Al interesarnos tanto letras minúsculas como mayúsculas debemos poner el modificador NC.

[h=2]Problema común y final del escrito[/h]Suele pasar que el programador, al usar el mod_rewrite por primera vez, después de haber hecho funcionar sus primeros patrones, etc. diga… ¡No me funcionan los enlaces! ¡No me carga la hoja de estilos! Bien, esto es muy fácilmente solucionable y totalmente previsible. Solo debemos poner la dirección "base" de la página hacia el dominio principal y hacer las demás rutas relativas. Para esto tenemos el elemento <base /> de XHTML:

<head>

<base href="http://www.example.com/" />

</head>

Con esto se soluciona cualquier problema de que no cargue algo…

  • Upvote 2
  • Like 1
Enlace al comentario
Compartir en otros sitios web

Crear una cuenta o conéctate para comentar

Tienes que ser miembro para dejar un comentario

Crear una cuenta

Regístrese para obtener una cuenta nueva en nuestra comunidad. ¡Es fácil!

Registrar una nueva cuenta

Conectar

¿Ya tienes una cuenta? Conéctate aquí.

Conectar ahora
 Share

×
×
  • Crear nuevo...