Hacer un redireccionamiento de enlaces antiguos

Recientemente he actualizado una web pasándola de un viejo y lento joomla, a un potente y velocísimo kumbiaphp. En el cambio me he visto inmerso en 3 graves problemas:

  1. Base de datos muy grande y algo lenta.
  2. Muchísimas visitas.
  3. Artículos con escritura de la URL “diferente”

El problema 1 y 2 se soluciono muy fácilmente usando la cache (de la cual hablaré próximamente en un post especifico dedicado a ello), pero lo verdaderamente sorprendente por su sencillez y simplicidad es como reconstruir las URL antiguas para que funcione con el nuevo diseño de url/rutas.

Al principio imaginé que la forma más sencilla de hacerlo sería mediante reglas en el htaccess. Después pensé en modificar el router del core para que funcionase como yo quería, pero al final resultó muchísimo más sencillo: redireccionamiento desde la vista 404.

Si estamos con el sitio en PRODUCCION, cuando una URL de nuestro sitio no existe, kumbia lanzará la vista 404.phtml para informarnos del error. Es allí, mediante unas simples validaciones donde podremos comprobar la URL que falla, analizarla y ver si tenemos que redirigirla a la URL correcta mediante un redireccionamiento 301 (Página movida permanentemente) o si por el contrario es un error 404 legítimo.

Ventajas:

  1. Fácil manejo desde PHP
  2. Independiente del servidor
  3. Más velocidad (sólo necesita validar si no existe la URL y no en cada Request)

Os dejo el código que me sirvió a mi, tanto cuando las urls correspondían con un patrón fijo, como para otras URL estáticas que tienen su correspondiente nueva URL. También podéis crear una clase para manejar vuestras redirecciones.

<?php
$buscar = filter_var(Router::get('route'), FILTER_SANITIZE_STRING);
$correspondecias = array(
"/jprovincia.html" => "provincia",
"/portada.html" => "portada",
"/jopinion.html" => "jopinion",
"/region.html" => "region",
"/local.html" => "local",
"/jsociedad.html" => "sociedadcultura",
"/deportes.html" => "deportes"
);
if(array_key_exists($buscar, $correspondecias)) {
Redirect::to("secciones/".$correspondecias[$buscar], 0, 301);
exit();
}
$articulo = (new Articulos)->find_first("urlantigua = '$buscar'");
if($articulo) {
Redirect::to("articulos/$articulo->slug", 0, 301);
exit();
}
// continuar con la vista 404
?>

KumbiaPHP Essentials

Bienvenido/bienvenida a KumbiaPHP.

Esta semana tenemos un video dedicado a los conceptos básicos de KumbiaPHP. Los videos son parte de una serie para compartir conocimiento y algunas prácticas que tenemos los desarrolladores que usamos este fabuloso framework.

Pueden descargarse los slides aquí: KumbiaPHP Essentials

Próximas semanas:

  • CRUD con KumbiaPHP (Create, Read, Update, Delete)
  • ActiveRecord Essentials
  • Templates (Bootstrap, Picnic, Foundation)
  • Autenticación Simple
  • Autenticación en base de datos
  • Uploads
  • Control de Acceso con ACL

How to create a REST Service with Basic Auth in KumbiaPHP

In the last post, we explained how to create a basic REST service. But everybody can access to it. What do if we want to make it  accessible only for authenticated users? There are a few authentication methods for REST service, and the most used of them is the OAuth, but today we shall speak about another  method more simple called Basic Auth.

Continue reading “How to create a REST Service with Basic Auth in KumbiaPHP”