Tutorial Intermedio a mod_rewrite


 
 

1 ¿Qué hace el mod_rewrite?

El mod_rewrite configura su servidor apache para garantizar que las páginas dinámicas (en este caso php) van a cambiar completamente y la extensiónes parecen páginas html

2 ¿Qué es la transformación de estática a dinámica?

Esta transformación sirve para asegurarse de que su página está mejor tratada por un motor de búsqueda. Un motor de búsqueda podría tener algunas dificultades para seguir un enlace tal que así:

http://www.ejemplo.es/index.php?page=noticias&id=69

Así, a través de la reescritura de la URL puede transformar lo anterior enlace a una página como esta:
código:

http://www.ejemplo.es/index/noticias/69.html

Una página de este tipo os aseguro, es mejor visto por los motores de búsqueda (Google primero)

Yo en este caso he utilizado 2 variables en mi url en php:

* page * Página
* id * Id

Es evidente que cuanto más alto es el numero de variables, más bajo serà la importancia para su página en motor de búsqueda.

3 ¿Cómo puedo asegurarme de que mi apache acepte la reescritura?

- A Para hacer esto debes cargar un módulo llamado mod_rewrite de apache

mod_rewrite.c

Para hacer esto debes ir en el archivo de configuración de apache: httpd.conf y descomentar las siguientes líneas:

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule rewrite_module modules / mod_rewrite.so
AddModule mod_rewrite.c AddModule mod_rewrite.c

Una vez que se han hecho reiniciar Apache.

- B - Intente ejecutar un archivo escrito en:

phpinfo();

fijad el directorio donde se encuentra el fichero de configuracion de apache y empezad a configurar como en paso A
La mayoría de nosotros (creo) tiene hosting que, evidentemente, no puede cambiar los ficheros de configuración entonces averiguad què el servicio se está ejecutando.

4 OK en mi servidor se está ejecutando el servicio ¿qué debo hacer?

Luego, en el supuesto de que el rewrite ejecute en ordenadores con Windows OS y Linux (yo en local lo hice en los dos y sin problemas) hay què crear un archivo llamado .htaccess.
Dentro de este archivo tendremos que escribir la regla que queremos nuestro servidor web interprete.

Permítanme 3 ejemplos de lo que se puede hacer (quien es más inteligente de mí, y no es dificil, con expresiones regulares puede hacer milagros):

* * * Ejemplo 1 * * *

Si por ejemplo utilizando el sistema en plantillas php puesta a disposición por este sitio:
http://www.holyguard.net/noticias/id_582/idcat_31/pro.html

Estamos en páginas dinamicas como esta:
código:

http://www.holyguard.net/index.php?page=noticias&id=582&cat=31

¿Qué significa esto?
Esto significa que estamos utilizando 2 páginas y 3 variables:

En este caso el código php que llama desde la primera pagin serà una cosa más o menos similare a esto
Código PHP:

$p="main";  //por defecto la página de Contenido Central 
if(isset($_GET['page'])){  //pagina emviada via parametro     
$p=$_GET['page'];     
if($p!=basename($p) || !preg_match("/^[A-Za-z0-9-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))
$p="error";     //pagina de error     
}
include($p.".php")

Es decir, incluir las páginas que se transmiten a través de la página variable $ (?page = nombrepagina) en la página que está viendo

Y luego hay noticias.php la página que recibe los valores de la variable $ id (&id =) y el uso más o menos como esta

$query = mysql_query("Select * from noticias where id='$_GET[id]'");

Entonces tendrás la URL dicha anteriormente:
código:

http://www.sitio.com/index.php?page=noticias&id=69

Pero pronto la trasformamos en una página como esta:
código:

http://www.sitio.com/index/noticias/69.html

Para hacer esto no tendrás otra alternativa que la de escribir la siguiente regla en .htaccess:
código:

RewriteEngine On
RewriteRule ^index/([^/]+)/([^/]+).html index.php?page=$1&id=$2 [L]

Y esto permite hacer la transformación como en el vínculo anterior

* * * Ejemplo 2 * * *

Mi sitio tiene sólo una variable en la URL como la siguiente:
código:

http://www.sitio.com/noticias.php?id=69

Como tendria què ser mi regla para el archivo .htaccess?
código:

RewriteEngine On
RewriteRule ^notizie/([^/]+).html noticias.php?id=$1 [L]

Questa mi permetterà di trasformare la pagina in Esto me permitirá pasar la página
codice: código:

http://www.sito.com/notizie/69.html

* * * 3 EJEMPLO * * *

Esto no difiere mucho de los primeros 2, pero sólo sirve para dejar claro de amplia útilizacion que podemos hacer con la reescritura:
Supongamos que yo uso la clase fpdf para crear los archivos en formado .pdf
Para ello vamos a tener dentro de las páginas una consulta con base de datos para extrapolar los datos y, a continuación, las diversas instrucciones a la clase:

$query = mysql_query("Select * from noticias where id='$_GET[id]'");  //............. etc etc  
//incluimos la classe 
require('fpdf.php');  
$pdf=new FPDF(); 
$pdf->AddPage(); 
$pdf->SetFont('Arial','B',16); 
$pdf->Image('img/logo.jpg', 50, -10, 105, 48); 
$pdf->SetTextColor(255,080,100); 
$pdf->write(8,"$titulo\n\n"); 
$pdf->SetTextColor(0,0,0);
$pdf->write(8,"-Autor: $autore\n\n");
$pdf->write(8, "Texto: $texto\n");

Para recuperar el archivo en formato pdf escribimos una dirección URL de este tipo aquí:
código:

http://www.sitio.com/pdf_noticias.php?id=69

Ademas a través de mod_rewrite podemos crear un falso (o como falsa redireccion) archivo pdf:
código:

http://www.sitio.com/pdf_noticias/69.pdf

Para todos los efectos, parece realmente un archivo pdf nunca más sería pensar que en realidad es una página en php
Para lograr esto es suficiente escribir en mod rewrite el siguiente:
codice: código:

RewriteEngine On
RewriteRule ^pdf_notizie/([^/]+).pdf pdf_notizie.php?id=$1 [L]

simplemente cambiar la extensión en la regla.
Un poco más sofisticado sería utizzare cosa en la URL como la siguiente:
código:

http://www.sitio.com/noticias/69-titulo-noticia.html

Esto es (lo que he leído en el último mes en los motores de búsqueda de este foro y por lo que he visto en los diversos organismos SEO = motor de búsqueda optimizado) para què los modores de busqueda leen nuestras páginas.

La regla de que tenemos que usar es siempre la misma:
código:

RewriteEngine On
RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]

Sin embargo, en tu página php (es decir, noticias.php) use el comando explode
Código PHP:

$pagina = $_GET[id]; 
$divisore = explode("-", $pagina); 
$id =  $divisore[0];// devuelve el numero que tienes antes de - 
$query = mysql_query("Select * from noticias where id='$id'");

Espero que lo que es explicado de manera clara y que podría ser útil (perdonais mi castellano)

 

 
 


Utilizamos cookies propias y de terceros para mejorar nuestros servicios, mostrarle publicidad relacionada con sus preferencias, realizar análisis estadísticos sobre los hábitos de navegación de nuestros usuarios y facilitar la interacción con redes sociales. Si continúa navegando, consideraremos que acepta su uso. Puede cambiar la configuración u obtener más información aquí Política de cookies.