Weblogs Código

RecorteX

» FuLaNo_
73 usuarios y 244 recortes de código
Usuario

Contraseña
Crear cuenta
Estás viendo los recortes del usuario FuLaNo_

RSS
Recortes: 2
Registrado: 30/8/2006
Web

Etiquetas:
php (2)
apache (1)
mysql (1)

Cambiar URL cumplejas por URL simples con Mod_Rewrite de Apache

Veremos un ejemplo simple de como utilizar el modulo de apache "Mod_Rewrite", que nos permite crear reglas que serán procesadas por el servidor (siempre que este sea un servidor Linux)

Supongamos que nuestra url actual es de esta forma:
http://www.supagina.com/web/index.php?mod=news&id=2345
Y queremos cambiarla por esta otra:
http://www.mipagina.com/web/noticias/2345.html
Entonces deberíamos crear el directorio "noticias" (sin comillas) y allí subir un archivo .htaccess con la siguiente regla
 
RewriteEngine on 
RewriteBase /web/ 
RewriteRule ^noticias/(.*).html$ index.php?mod=news&id=$1
 
Si quisiéramos darle un poco mas de seguridad podríamos utilizar expresiones regulares más exactas, por ejemplo, que solo se permitan números entre 1 y 6 caracteres
 
RewriteEngine on 
RewriteBase /web/ 
RewriteRule ^noticias/([0-9]{1,6}).html$ index.php?mod=news&id=$1
 
Jugando con expresiones regulares podrás adaptar todas tus URL's complejas a URL's fáciles de recordar.

Vale destacar que con este mismo modulo de apache podremos generar distintas acciones y no solo redireccionar URL, por ejemplo, con una simple línea podríamos denegar el ingreso a un directorio.
Deny from all
 
Esto ultimo se utiliza mucho en, por ejemplo, directorios en donde se guardan los módulos de un sitio, ya que podremos incluir el archivo desde php, pero un extraño no podrá ingresar al archivo tipeando su dirección.

Paginar resultados con PHP

Crearemos una función en PHP para paginar resultados de una consulta MySQL

Función:
 
<?php
function PAGINAR($_max,$_db,$_uri,$_sep,$_class) {
  // $_max obtiene el numero de filas a mostrar en cada pagina (default: 20)
  // $_db contiene la consulta SQL que genera el paginador (default: error)
  // $_uri contiene la URL de la pagina para propagarla (default: automatico)
  // $_sep contiene el/los caracter/es que separan cada numero de pagina, por default son espacios en blanco (opcional)
  // $_class contiene la clase personalizada para darle formato a los vinculos (opcional)
  if (empty($_max)) { $_max = 20; } else { $_max = $_max; }
  if (empty($_sep)) { $_sep = '&nbsp;&nbsp; '; } else { $_sep = $_sep; }
  if (empty($_class)) { $_class = 'paginator'; } else { $_class = $_class; }
  if (empty($_GET['p'])) { $_pag = 1; } else { $_pag = $_GET['p']; }
  if (empty($_db)) { echo 'Error critico. No se ha seteado la variable $_db para realizar la consulta SQL'; exit; } else { $_db = $_db; }
  $_query = @mysql_query($_db); $_total = @mysql_num_rows($_query); $_total = ceil($_total/$_max);
  if (!$_uri) { $_uri = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; } else { $_uri = $_uri; }
  if ($_total >= 2) {
    for ($_i = 1; $_i <= $_total ;$_i++) {
      if ($_pag) {
        if (($_i == $_pag) || (!$_GET[p] && $_i == 1)) { echo '<span class="'.$_class.'">['.$_i.']</span>'.$_sep }
        else { echo '<a href="'.$_uri.'&amp;p='.$_i.'" class="'.$_class.'"><span class="'.$_class.'">'.$_i.'</a>'.$_sep; }
      }
    }
    mysql_free_result($_query);
  }
}
?>
 
Modo de uso (explicado linea a linea):
 
<?php
// indicamos el valor maximo
$_paginador[max] = 20;
 
// obtenemos el valor minimo actual
if (empty($_GET['p']) || $_GET['p'] == 1) { $_paginador[min] = 0; } else { $_paginador[min] = ($_GET['p']-1) * $_paginador[max]; }
 
// realizamos la consulta
$_sql = mysql_query("SELECT * FROM `nombre_de_tabla` DESC LIMIT $_paginador[min],$_paginador[max]");
while ($_row = mysql_fetch_assoc($_sql)) {
  echo $_row['nombre_de_campo'];
}
 
// URL actual
$_paginador['url'] = 'index.php?mod=fotos';
 
// Consulta sin LIMIT para contar los registros totales.
$_paginador['db'] = 'SELECT * FROM `nombre_de_tabla`';
 
// indicamos el separador (opcional)
$_paginador['sep'] = '&nbsp;&nbsp;';
 
// indicamos la clase CSS (opcional)
$_paginador['class'] = 'blue';
 
// llamamos al paginador
PAGINAR($_paginador[max],$_paginador['db'],$_paginador['url'],$_paginador['sep'],$_paginador['class']);
 
?>
 
Proyecto: Juanjo Navarro, 2006 - Diseño: Albin