Si vas a copiar

.. y pegar este post en tu web o blog personal, por favor te pido que coloques el link del post de donde lo copiastes:

Fuente:

PHP y las URLs amigables con el mod_rewrite de Apache

13 de diciembre de 2008 No hay comentarios.:
Aqui estoy despues de tanto tiempo sin escribir por aca, esta vez les dare instrucciones de como usar el modulo: mod_rewrite del servidor Apache pero en primer lugar para poder usar este modulo hay que hacer unas modificaciones:

Las pruebas las hare con el siguiente sistema:

Windows XP SP3 [Apache Server 2.0.63] [PHP 5.2.6]

Aqui esta la guia oficial del modulo mod_rewrite el problema es que esta en ingles.


El modulo mod_rewrite cuando esta activado puedes usar reglas en expresiones regulares tanto para esta url:

http://midominio.com/index.php?s=categorias&ss=ropa&id=franelas

como esta:

http://midominio.com/categorias/ropa/franelas


Las dos son validas pero la segunda es mucho mejor.


Antes que nada para poder usar el mod_rewrite debemos configurar Apache de esta manera:

1. Editar el archivo httpd.conf del directorio conf de Apache la direccion del archivo mas o menos seria:

C:\Archivos de programa\Apache Group\Apache2\conf

Puedes abrir el archivo con el bloc de notas y busca esta sentencia en el archivo:

AllowOverride None

La cambias a:

AllowOverride All

De esta manera ahora se tendra acceso al archivo .htaccess del servidor


2. Activar el modulo mod_rewrite ya que en esta version no viene activada por defecto ahora en ese archivo busca esta linea que contenga:

#LoadModule rewrite_module modules/mod_rewrite.so

Quitale el (#) numeral para que cargue el modulo mod_rewrite.so:

LoadModule rewrite_module modules/mod_rewrite.so

3. Reiniciar el Apache.


Puedes hacer una prueba para ver si Apache lee el archivo .htaccess antes de enviar la URL, puedes reproducir un error escribiendo lo que quieras en el archivo .htaccess por ejemplo en el directorio principal C:\Archivos de programa\Apache Group\Apache2\htdocs creas un archivo .htaccess de la siguiente manera:

--> Click derecho en el directorio --> Nuevo --> Documento de texto

Luego abres el archivo con el Bloc de notas escribes cualquier cosa y luego Menu Archivo --> Guardar como...

Nombre: .htaccess
Tipo: Todos los archivos

Click en Guardar

Para ver si Apache accede al archivo .htaccess ve a la direccion:

http://localhost/


Y te aparecera el error: "Internal Server Error"



Ahora pasamos a hacer pruebas con PHP vamos a crear un archivo index.php en este directorio:

C:\Archivos de programa\Apache Group\Apache2\htdocs

Escribe esto en el archivo index.php:


<?php

print_r($_GET);

?>


Ahora editar el archivo .htaccess antes guardado en:

C:\Archivos de programa\Apache Group\Apache2\htdocs

Escribe esto en el archivo .htaccess:

Options +FollowSymLinks -Indexes

# activar el re-escrito de las URLs
RewriteEngine On

# Si la URL NO es un archivo
RewriteCond %{REQUEST_FILENAME} !-f
# Si la URL NO es un directorio
RewriteCond %{REQUEST_FILENAME} !-d

# Entonces enviar la URL amigable al archivo index.php
RewriteRule ^(.*)$ index.php?query_string=$1 [L]


Aqui puedes descargarte una chuleta del mod_rewrite en formato PNG o PDF esta en ingles, a ver si me animo y hago uno en español.

Haz una prueba y escribe esto en el navegador:

http://localhost/esto/es/una/url/amigable/que/se/extiende/bastante/mas/y/mas

Vera algo como esto en la salida del archivo index.php

Array
(
[query_string] => esto/es/una/url/amigable/que/se/extiende/bastante/mas/y/mas
)



Viendo estos ejemplo tanto del contenido del .htaccess, index.php y la salida en el navegador ya se va teniendo una idea de lo que hace el modulo mod_rewrite de Apache, si el modulo no estuviese activado Apache te lanzaria un error intento esto para reproducir el error, en el archivo .htaccess cambia esto:

RewriteEngine On

Por esto:

RewriteEngine Off

Escribe en el navegador:

http://localhost/esto/es/una/url/amigable/que/se/extiende/bastante/mas/y/mas

Y como veras te lanzara un error 404 Not Found.


Para saber que URL le esta llegando al archivo index.php tienes que parsear la URL de esta manera:



<?php

// ejemplo: http://midominio.com/ropa/franelas/quicksilver-html
$url = explode( "/", $_SERVER['REQUEST_URI'] ); // separar el array con / slash
$seccion = $url[0]; // ropa
$subseccion = $url[1]; // franelas
$contenido = $url[2]; // quicksilver-html

?>


NOTA: este post se actualizara periodicamente. Ultima actualizacion: 22/02/09



Publicado en tttony.blogspot.com

Buscar en el Blog



PUBLICIDAD