Displaying articles with tag

Usando URL amigables en tu blog con los Permalinks de WordPress

Posted by willywg, Thu Jan 11 06:48:00 UTC 2007

Hace poco leía el blog de TheGhost, Tintafantasma, y me tope con un post titulado 7 trucos esenciales para WordPress que te aconsejan como repotenciar tu blog para hacerlo más productivo en videos elaborados por Tubetutorial, tocando los siguientes temas:
  1. Cómo obtener más tráfico de búsqueda con un simple truco
  2. Cómo hacer más dinero con AdSense
  3. Feedvertising: Hacer dinero con su RSS
  4. Más colaboraciones, menos spam: Extensión de Worpress de formulario de contacto
  5. Cómo incrementar los comentarios y vistas de página con una rápida y simple extensión
  6. Cómo detener el spam en los comentarios sin necesidad de cortarse un dedo
  7. Respalde su blog o arriésguese a perderlo todo
Muchos de estos consejos ya los venía siguiendo, algunas veces por propia intuición, otras por leer posts como este; pero en ninguno de los casos conté mi experiencia personal, que es lo que pienso hacer ahora con el primero de estos tutoriales (de la misma manera haré con los tutoriares siguientes en otras entregas).

Usando URL amigables en tu blog con los Permalinks de WordPress.

La primera entrega de los tutoriales: Cómo obtener más tráfico de búsqueda con un simple truco, trata sobre cómo tener un mejor posicionamiento en Google usando Permalinks de URLs amigables.

Pero ¿qué es un permalink? . Pues bien de acuerdo con la definición del WordPress en Using Permalinks, un permalink son las URLs permanentes para cada post individual en tu blog, estos permalinks pueden ser usados por otros blogs o websites para enlazar con nuestros posts. En otras palabras se trata de un enlace, solo que la característica del mismo que debe ser permanente, es decir, no se debe cambiar, de allí el prefijo "perma" de los permalinks (enlaces permanentes).

Tipos de permalinks.

Básicamente hay tres tipos de permalinks, todos pueden usarse indistintamente para referenciar al mismo post. Para el ejemplo tomaré mi post sobre los juegos para el K-PEX.
  1. Los que vienen por defecto y no son muy amigables, p.e. http://willy.tiperu.com/?p=54
  2. Los medianamente amigables, los llamo así porque las URL son amigables, pero no hacen uso del mod_rewrite de apache para enmascarar la URL, en su lugar usan una rutina del WordPress pero deben dejar en la URL el nombre del archivo index.php. Este tipo de URLs los venía usando hasta hace poco en mi blog y son como siguen: http://willy.tiperu.com/index.php/juegos-kingston-k-pex/
  3. Los altamente amigables, que usan el mod_rewrite, módulo de Apache para enmascarar las URLs poco amigables por otras de más fácil lectura. Este tipo de permalinks son similares al anterior, solo que omiten el index.php de la URL, lo cual lo hace más elegante y amigable. Al hacer uso de un módulo de Apache, requieren de un archivo .htaccess en el directorio raíz de nuestro blog. El día de ayer cambie los permalinks de mi blog por esta opción quedando las URLs tal como: http://willy.tiperu.com/juegos-kingston-k-pex/
Estableciendo permalinks amigables.

Antes de establecer permalinks altamente amigables debes fijarte si tu servidor web es Apache y tiene activado el mod_rewrite. Si es así asegúrate de tener un archivo .htaccess sin contenido en el directorio raíz de tu blog. Si no cumples ninguno de estos requisitos no te preocupes, puedes usar los permalinks medianamente amigables.

Lo que debes hacer ahora es ingresar a tu panel administrativo, dar clic en la pestaña options, y luego en la subpestaña permalinks. Una vez allí te mostrará cuatro opciones:
  • Default, con URLs simples del tipo http://willy.tiperu.com/?p=123
  • Date and name based, con URL amigables del tipo http://willy.tiperu.com/2007/01/11/sample-post/ o http://willy.tiperu.com/index.php/2007/01/11/sample-post/
  • Numeric, con URL amigables del tipo http://willy.tiperu.com/archives/123 o http://willy.tiperu.com/index.php/archives/123
  • Custom, en la cual podemos personalizar nuestras URLs amigables.
La segunda y tercera opción son URLs amigables predefinidas por el WordPress. La basada en nombres y fechas es tentadora, pero demasiada larga para mi gusto; la tercera opción, basada en números, es poco descriptiva. La que debe interesarnos es la cuarta opción, ya que nos permite personalizar nuestra URL amigable.

Al seleccionar la opción Custom debes ingresar en la caja de texto posterior el siguiente valor si tienes instalado el mod_rewite y tienes acceso al .htaccess: /%postname%/ esto te generara URLs altamente amigables del tipo http://willy.tiperu.com/sample-post/ En caso contrario debes ingresar el siguiente valor: /index.php/%postname%/ para URLs medianamente amigables del tipo http://willy.tiperu.com/index.php/sample-post/

Finalmente das click en el botón de actualizar y los cambios estarán casi listos. El WordPress te generará una estructura similar a:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Asegúrate de copiar este contenido en el archivo .htaccess y subirlo al directorio raíz de tu blog.

Observaciones
  • Si ya tenias bien posicionados los posts de tu blog en los buscadores, no te preocupes, si alguien ingresa a alguna de tus URL antiguas (no personalizadas), el WorPress se encargará de mostrar el contenido adecuado, recuerda, son permalinks: enlaces permanentes.
  • Si tienes subdirectorios en tu blog, recuerda no usar los mismos nombres para los permalinks de tus post en el bloque Post slug, tampoco uses los mismos nombres que las categorías; esto causará conflictos.
  • Si uno de tus post tenía un PageRank (PR) elevado con una URL anterior al cambio, la URL nueva tendrá PR cero. Esto es porque el Google evalúa los PR a razón de los URLs. Pero no te preocupes, de igual manera tu URL anterior estará ya posicionada en Google.
Bueno, espero que este material les sirva de ayuda para repotenciar su blog, en futuras entregas les estaré comentando como me fue con los otros tutoriales de Tubetutorial.

4 comments | Clasificado en: Programación Tecnología Temas varios | Tags:
#

Optimizando una web de URL extensas a URL amigables con Apache y PHP

Posted by willywg, Sun Jun 25 11:58:00 UTC 2006

Resumen. En este manual Ud. aprederá cómo optimizar de manera sencilla una web dinámica hecha en PHP, cuyas URL's pasadas a los enlaces contengan extensas variables pasadas mediante GET, a una web cuyas URL sean amigables (fáciles de recordar).

Introducción.

Los que programamos en PHP, o bajo cualquier otro lenguaje de programación orientado a web, por lo general tendemos a pasar datos de una web origen a otra destino mediante variables del tipo GET generando enlaces tal como: http://www.tiperu.com/index.php?mod=ecommerce&producto=tienda&op=3 que difícilmente son indexadas por algunos buscadores y lo que es peor aún: son nada asimilables por un usuario común (a este grupo de URL las llamaremos URL extensas para efectos del presente artículo). Si lo vemos desde esa perspectiva justo sería afirmar que las web dinámicas tienen desventajas en ese ambito sobre las web estáticas del tipo http://www.tiperu.com/ecommerce.html que son mucho más fáciles de recordar por su simpleza y carencia de variables vía GET, a este tipo de URL las conocemos (y me referiré a ellas en adelante) como URL amigables.

Quiero dejar en claro que lejos de la división convencional entre lo que son web estáticas o dinámicas en este manual me referiré a ambas en función a la diferencia de URL especificadas en el párrafo anterior - hecha la aclaración continuo con el artículo.

Felizmente para los que usamos Apache como servidor web, conjuntamente con PHP, esto tiene solución gracias al módulo mod_rewrite (URL Rewriting Engine) que nos permitirá mediante unas cuantas reglas transformar nuestras URL extensas en URL amigables.

Si bien es altamente aconsejable aprender el correcto manejo del mod_rewrite y sus correspondientes reglas, en este artículo no se hará explicación extensiva del mismo pues su objetivo principal, y claramente detallado en el título, es mostrar al lector cómo optimizar una web de URL extensas a URL amigables; con esto quiero dejar a entender que se asume que el lector posee un website ya creado con URL extensas y desea pasarlas fácilmente a URL amigables "en un dos por tres" .

Preparando el archivo ".htaccess".

El archivo .htaccess nos permite pasarle información al servidor Apache para que cumpla ciertas reglas de configuración en la carpeta que lo contenga, por tal motivo debemos copiar este archivo en la carpeta que contengan los archivos php en los cuales realizaremos los cambio de URL:
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3. #4 variables
  4. Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5&$6=$7&$8=$9
  5. #3 variables
  6. Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5&$6=$7
  7. #2 variables
  8. Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5
  9. #1 variable
  10. Rewriterule ^(.*)/(.*),(.*)/$ $1.php?$2=$3
En las dos primeras líneas nos aseguramos de que esté activado el mod_rewrite en el Apache (si esto no funciona deberá comunicarse con su administrador para que active el módulo en el servidor).

Las líneas antecedidas por "#", como las 3, 5, 7 y 9 ; son simplemente comentarios, no los tome en cuenta.

En las líneas 4, 6, 8 y 10 se establecen las reglas que nos permitirán tranformas nuestras URL extensas en amigables. Analizaremos aquella que permite transformar dos variables, las demás son similares:

Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5

La expresión en rojo es la nos permitirá escribir la regla en el Apache. La cadena en color verde oscuro permite escribirá la URL amigable, inicia desde el caracter ^ hasta el $. Y finalmente la cadena en azul es nuestro URL extenso. La transformación se hará de la siguiente manera:

De URL extensa:
./index.php?categoria=monitores&productoID=12345

En URL amigable:
./index/categoria,monitores/productoID,12345/

Como se puede apreciar la regla tomara el nombre del script y le quitara la extensión ".php" para tomarlo como un directorio (nótese la parte en negritas):
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5 ./index.php?categoria=monitores&productoID=12345 ./index/categoria,monitores/productoID,12345/

Seguidamente toma el primer par ?valor=variable y lo transfroma en una subcarpeta valor,variable/:
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5 ./index.php?categoria=monitores&productoID=12345 ./index/categoria,monitores/productoID,12345/

Y finalmente hace lo propio con el par &valor=variable y lo transforma en una subcarpeta valor,variable/:
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5 ./index.php?categoria=monitores&productoID=12345 ./index/categoria,monitores/productoID,12345/

Como ya se habra dado cuenta, los valores antecedidos por el símbolo dólar ($) en la parte de las URL extensas reemplazan a los (.*) de las URL amigables.

Bueno ya tenemos el archivo .htacces que nos permitirá lograr los resultados que deseamos a nivel del servidor, ahora procederemos a crear el script php que nos permita cambiar nuestras URL extensas en amigables sin tener que hacer ninguna modificación directa en los "N" enlaces que posea nuestro sitio web.

Generando el script en php.

El script php que se usaremos se encargará básicamente de tomar la URL extensa, si esta ha sido pasada mediante el método GET, y la transformará en una URL amigable a la cual redirecionará usando la función header. Puesto que header redirecionará hacia la misma web, y esto causará lo que se conoce como un bucle infinito, se hará uso de variables de sesión que nos ayuden a evitar tal inconveniente; por tal motivo nuestro script se seccionará en 2 partes: la primera irá en las primeras líneas de todas las páginas a las que aplicaremos el script, y la segunda parte (encargada de limpiar la variable de sesión) irá al final de las páginas. Aclarados los detalles, explicaré mediante comentarios el script php:
< ? php
//Iniciamos o continuamos la sesión encargada de evitar el bucle infinito
session_name("url_amigable");
session_start();
//Almacenamos datos del server, script y variables (pasadas por GET)
$Server=$_SERVER['SERVER_NAME'];
$Script=$_SERVER['PHP_SELF'];
$Variables=$_SERVER['QUERY_STRING'];
//Verificando si tiene variables por GET
//y no se han pasado datos mediante un form por POST
//ya q al redireccionar un post puede ocasionar errores.
//Tambien verificamos que la variable de sesión 'Listo'
//sea diferente a 1, esto nos eviara un bucle infinito.
if(!empty($Variables) && $_SERVER['REQUEST_METHOD']=='GET' && $_SESSION['Listo']!=1){
//Si tiene variables pasadas por GET se procede a hacer el cambio.
//1. Agrupando $Variables por "variable=valor" en el array $Variable.
$Variable=explode("&",$Variables);
//2. Sustituyendo "=" por "," y concadenandolo en variable $Amigable.
($i=0; $i < count($Variable); $i++){
$Amigable.="/".str_replace("=",",",$Variable[$i]);
}

//3. Quitando la extension ".php" a $Script para simular un directorio.
$Dir=str_replace(".php","",$Script);
//4. Generando la URL Amigable.
$URL_AMIGABLE="http://".$Server.$Dir.$Amigable."/";
//5. Colocando la variable de sesión 'Listo' a 1 para evitar el bucle infinito
// al redireccionar la web.
$_SESSION['Listo']=1;
//6. Redireccionando a la url amigable
header("Location: $URL_AMIGABLE");
//7. Exit hará que culmine hasta este punto el script, si no estuviera 'exit'
// el script continuaría ejecutándose y llegaría hasta el final del mismo, es decir,
// a la parte donde colocamos a la variable de sesión 'Listo' en cero, originandose
// entonces un bucle infinito.
exit;
}
//Cambie $_URL_BASE por la ruta raiz de su web, ya que al simular la url amigable
//directorios, hará que no muestre adecuadamente los origenes de los recursos que
//llama su página web.
$_URL_BASE="http://".$Server."/pruebas/url_amigable/index.php";
?>
< html >
< head >
< title >URL Amigables< / title>
< base href = "< ? echo $_URL_BASE;?>" target="_top" />
< / head>
< body>
< ! - - Aquí el contenido de su página web - ->
< / body>
< / html>< ? php
//Limpia el posible bucle, es decir, se puede volver a hacer el envío. $_SESSION['Listo']=0;
?>

Recomendaciones finales.


Como habrán podido ver el script no es complicado, y la adaptación a una web ya constituida tampoco lo será. Ya he probado la técnica en uno de mis proyectos (de manera local) y me ha funcionado bastante bien.

Lo que sí quiero aclarar es que al momento de testear esta técnica en una url de 5 variables a más me generó errores (básicamente no encuentra la url amigable generada); una url de 4 variables redireciona correctamente, pero si luego de ello refresco el navegador genera el mismo error, es decir, no (re)carga la url amigable.

Mi consejo es que usen esta técnica en una url de 3 a menos de 3 variables pasadas por GET y personalicen este script a sus necesidades. Y como es lógico, les aconsejo bastante informarse más sobre el uso del mod_rewrite en Apache, creanme que les aliviará más de un dolor de cabeza.

Finalmente les diré que pueden descargarse el script desde aquí: url_amigable.zip.

Derechos de Autor.

Se autoriza la libre distribución y uso de este material, así como también su publicación en otros sitios web (siempre que no sea con fines comerciales ni lucrativos) de manera total y/o parcial siempre que no se altere el sentido de su contenido y se indiquen expresamente los siguientes datos (salvo que mi persona permita lo contrario):

Autor: William Wong Garay Website: http://www.tiperu.com Blog: http://willy.tiperu.com

Libros recomendados.

Apache: The Definitive Guide (3rd Edition) Beginning PHP5, Apache, and MySQL Web Development (Programmer to Programmer) Apache Server 2.0: The Complete Reference

17 comments | Clasificado en: Artículos Programación | Tags:
#