KAIZEN.
Mejoramiento continuo en la vida personal, familiar, social y de trabajo, que involucra a todos los actores de un proyecto por igual.Nuestra forma de vida merece ser mejorada constantemente creando estrategias de desarrollo orientadas a procesos con el fin asegurar el mejoramiento continuo

martes, 4 de septiembre de 2007

Empezando con Zend - Framework

Bootstrapping (Configuración de Arranque)
El controlador (controller) de Zend FrameWork, Zend_Controller se diseño para ofrecer sitios Web con direcciones url claras. Para lograr esto, todas las peticiones deberán ser procesadas únicamente por un archivo index.php. Asi se ofrece un punto central para todas las páginas de la aplicación y asegura la instalación de un ambiente correcto para ejecutar la aplicación. Esto se logra mediante el uso de un archivo .htaccess (que es utilizado por el modulo mod_rewrite del servidor web apache)dentro del directorio raíz de zf-tutorial:
zf-tutorial/.htaccess
RewriteEngine on
RewriteRule .* index.php
php_flag magic_quotes_gpc off
php_flag register_globals off

Funcionamiento
Apache usa archivos con el nombre de .htaccess para que el administrador de las páginas web 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 este tipo de archivos en plataformas Microsoft Windows puede ser un problema, ya que este no permite poner archivos sin nombre pero ello no significa que no se pueda hacer.

El archivo se puede crear de varias maneras, utilizando PHP bastaria con poner algo como lo siguiente para crear el archivo:
<?php
touch
('.htaccess');
?>


Comprobar que tenemos activado mod_rewrite

Podemos hacer lo siguiente

<?php
echo phpinfo();

?>

Si Apache está como módulo de PHP entonces podemos revisar en los módulos que tiene cargados, en el cual mod_rewrite está entre ellos.

Configuracion .htaccess
Como primer paso deberemos poner al principio del archivo .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


Funciones o comandos del mod_rewrite

La sintaxis de los comandos del mod_rewrite es bastante sencilla y rápida de entender. Los comandos empiezan con Rewrite y normalmente el patrón de sintaxis es el siguiente:

Comando Parámetro1 Parámetro2

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

RewriteEngine
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

RewriteBase
Nos permite ajustar una "base" para las rutas que escribamos. 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í).
ejemplo
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



RewriteCond

Permite 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

RewriteRule
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 se haya indicado. 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.


Modificadores de RewriteRule
Esto son las flags de las que se habla en el manual oficial,a los cuales los llamaremos 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.

Solo mencionaremos 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:
nocase (NC)

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.
redirect (R[=codigo])
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ódigo 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).

last (L)
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.

Construcción de reglas o patrones
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 se recomienda 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:

* Expresiones regulares, por Iván Arias
* Expresiones regulares en Ignside


Es muy importante que delimitemos el rango de caracteres correcto acorde a nuestra necesidad. 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

En 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).

Ejemplos de 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, tomar el número y pasárselo a una aplicación:

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

Si quisieramos 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.

Problema común y final del escrito
Suele pasar que 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>


Para obtener infomracion mas detallado sobre el comando modrewrite.com y sus foros de ayuda
Tambien podemos utilizar la siguiente pagina como wizard de ayuda para crear sentencias http://www.mod-rewrite-wizard.com/

Como activar el modulo mod_rewrite en XAMPP
editar el archivo xampp\apache\conf\httpd.conf
busca la linea #LoadModule rewrite_module modules/mod_rewrite.so y quitarle el simbolo # , como paso siguiente se debe reiniciar el servidor apache

1 comentario:

tierrarara dijo...

buenisimo este post. felicitaciones