Spiga

Redirección 301 en Symfony: filtros vs htaccess

January 27, 08 by Pedro Hernández

Este tema salio de una urgencia que tubo mi buen amigo Joan y como ya antes en la lista de symfony en español se había preguntado, salio la idea de resolverlo a modo de competencia. Por mi parte como Filtro de Symfony y por la parte de Joan con htaccess.

¿Para que sirven estas soluciones?
Pues bien en Symfony por defecto las URI no terminan en slash (por temas SEO), es decir si terminan en algo así: www.site.com/moudulo/, esto te retornará un 404. Para evitar este problema y hacer una redirección 301 de www.site.com/moudulo/ a www.site.com/moudulo aquí las soluciones:

Con un filtro en symfony:
Solo colócalo en la carpeta lib de tu aplicación

<?php
class redirect301Filter extends sfFilter
{
  public function execute($filterChain)
  {
    if ($this->isFirstCall())
    {
      $uri = $this->getContext()->getRequest()->getUri();

      if (preg_match('#/$#', $uri))
      {
        $uri = preg_replace('#/$#', '', $uri);
        $this->getContext()->getController()->redirect($uri, 301);
      }
    }

    // Ejecutar el proximo filtro
    $filterChain->execute();
  }
}

Y activas el filtro así:

sshot-2008-01-27-02-11-27.png

Ahora la versión de Joan con htaccess:

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On

  # uncomment the following line, if you are having trouble
  # getting no_script_name to work
  RewriteBase /

  # we skip all files with .something
  RewriteCond %{REQUEST_URI} \..+$
  RewriteCond %{REQUEST_URI} !\.html$
  RewriteRule .* - [L]

  # remove trailing slash
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} ^(.*)/$
  RewriteRule ^(.*)/$ $1 [R=302,L]

  # we check if the .html version is here (caching)
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

# big crash from our front web controller
ErrorDocument 500 "<h2>Application error</h2>symfony application failed to start properly"

Para este caso (y como lo comenta Joan) el RewriteBase / es obligatorio si te quieres evitar problemas.

En las pruebas de rendimiento obviamente htaccess sale ganando, pero queda de tu parte elegir cual usar :) .

Si no es del todo legible el código colocado mas arriba (comienzo a odiar al iG:Syntax Hiliter) puedes descargarlo de aquí filtro_vs_htaccess.zip.

Add your comment

6 responses for this post

  1. rpsblog.com » A week of symfony #56 (21-&gt;27 January 2008) Says:

    [...] Redirección 301 en Symfony: filtros vs htaccess [...]

  2. Matias Says:

    Hola, queria felicitarte por el componente CSSTabs. Lo estoy utilizando y te aseguro que esta muy simple y practico. Te hago una pregunta. Se que por lo que esta en la pagin del plugin dentro de symfony, esta en la listas de TODO. Pero podrias decirme como podria resolver el tema de la integracion con el sfGuardPlugin. El tema seria que tengo que ocular 3 pestanias solamente, y que solo pueda verlo un usuario en particular (el usuario root).
    Gracias!

  3. phpleo Says:

    Hola Matias. Gracias por usar mi plugin. La integración que solicitas ya está hecha por mi amigo Mauro Casula en su blog, pero esta versión del plugin no la llevará por que será refactorizado para mejorar aún más su rendimiento. Puedes ver la solución aquí: http://www.symfony-framework.com/2007/10/18/symfony-plugin-sfcsstabs-recognition-of-credentials-addon/

    Salu2.

  4. Matias Says:

    Gracias!

  5. Alejandro Says:

    Hola, felicitaciones por su Web, es muy interesante, le escribo para proponerle un intercambio de enlaces, yo pongo un enlace a su Web en la mia y usted pone un enlace a mi sitio en el suyo, esto nos beneficiaria a los dos, logrando un mejor pocisionamiento en los buscadores al aumentar la cantidad de enlaces hacia nuestro sitio y aumentaria el numero de visitas.
    Mi sitio es un blog que trata variados temas de programacion, tecnologias para el desarrollo Web como: .NET, JBoss Seam, y otros articulos, con el objetivo de intercambiar informacion sobre el extenso mundo de la programacion.

    Mis datos son:
    Titulo: Blog de Programacion
    URL: blogdeprogramacion.blogspot.com

    Envieme sus datos y lo agregare a mi directorio de enlaces: (http://blogdeprogramacion.blogspot.com/2007/12/directorio-de-enlaces.html)

    Gracias por su tiempo …

  6. El Hombre Virtual Says:

    Muy bueno el blog amigo, te invito a que visites el mio http://www.elhombrevirtual.blogspot.com
    Recomendaré el tuyo, saludos

Leave a Reply