Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Casidiablo en 28 Junio 2008, 00:23 AM

Título: Cómo crear permalinks agradables
Publicado por: Casidiablo en 28 Junio 2008, 00:23 AM
Umm... esto lo escribí ya hace un rato, pero que más da (además que hace mucho que no aporto nada al foro). La idea de este artículo es mostrar un sencillo ejemplo de cómo hacer que los links de nuestras aplicaciones web sean "bonitos". De tal manera no tendríamos links como estos:

http://www.sitio.com/index.php?accion=consultar&objetivo=personas

Sino algo estéticamente más agradable como:

http://www.sitio.com/personas/

¿Qué necesito?

Es necesario tener en cuenta los prerrequisitos para poder hacer esto. Para este ejemplo voy a suponer que la aplicación la estás haciendo sobre el servidor Apache, y que estás programando en PHP+MySQL. Necesitas:


Ejemplo
Para nuestro ejemplo necesitamos un servidor Apache con ModRewrite, PHP y MySQL. Lo primero es crear la base de datos, así:

Código (sql) [Seleccionar]
create database ejemplo;
create table contenidos(
id int(5) primary key auto_increment,
titulo varchar(50),
contenido varchar(1000),
slug varchar(50));


Luego creamos una carpeta dentro del htdocs de apache, en donde pondremos los archivos de nuestro ejempo (mkdir /opt/lampp/htdocs/ejemplo). Hecho esto, lo siguiente es crear el archivo .htaccess, en el cual indicaremos las reglas del ModRewrite. En nuestro ejemplo tenemos algo como esto:

Código (apache) [Seleccionar]
# Esto es un comentario
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /ejemplo/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /ejemplo/index.php [L]
</IfModule>


Una explicación breve de este .htaccess:

Vamos ahora con nuestro archivo index.php:

Código (php) [Seleccionar]
<?php
   
//URL base de la aplicacion
   
$base "http://localhost/ejemplo/";
   
//Crear la conexion a la base de datos
   
$conexion mysql_connect("localhost""root""");
   
mysql_select_db("ejemplo"$conexion);
   
//Si se requiere unicamente el index
   
if(("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']) == $base ||
      
basename($_SERVER['REQUEST_URI']) == "index.php")
      
$contenido "Lo que vaya en el index por defecto";
   else {
      
$id $_GET["id"];
      
//Si es una URL fea-asquerosa...
      
if(!empty($id))
         
$consulta mysql_query("SELECT contenido FROM contenidos WHERE id = $id"$conexion);
      
//Si es una URL bonita...
      
else
      {
         
//Obtener el nombre clave
         
$slug basename($_SERVER['REQUEST_URI']);
         
$consulta mysql_query("SELECT contenido FROM contenidos WHERE slug = '$slug'"$conexion);
      }
      
//Si la consulta es correcta...
      
if(mysql_num_rows($consulta) > 0)
         
$contenido mysql_result($consulta00);
      
//Informar del terrible error
      
else
         
$contenido "Lo que est&aacute;s buscando no existe :P ";
   }
?>

<html>
<head><title>Un ejemplo</title></head>
<body><?php echo $contenido ?></body>
</html>



Hecho esto, nuestra aplicación tendrá el siguiente comportamiento:

La aplicación por defecto:

(http://i270.photobucket.com/albums/jj96/Casidiablo/1.png)

Una consulta a la antigua (URL fea):

(http://i270.photobucket.com/albums/jj96/Casidiablo/3.png)

Una consulta estéticamente más bonita:

(http://i270.photobucket.com/albums/jj96/Casidiablo/4.png)

Cuando no encuentra un registro:

(http://i270.photobucket.com/albums/jj96/Casidiablo/5.png)

Enlaces

P.d. El código es SOLO de ejemplo. Si hacen algo muy parecido podría ser vulnerable, por ejemplo, a inyecciones SQL. En sus aplicaciones tengan cuidado con eso.
P.d. Sobra decir que pueden hacer lo que quieran con el mini-tutorial (copiar, modificar, etc.) con o sin ánimo de lucro. Siempre y cuando se referencie la fuente ;)
Título: Re: Cómo crear permalinks agradables
Publicado por: Freeze. en 28 Junio 2008, 00:31 AM
Excelente..! :D

A esto le llamo yo un tutorial sencillo, practico y útil ;)