Redirecciones 301, simple way

Hasta hace poco hablar de una redirección 301 era hablar de liarse la manta a la cabeza con el .htaccess o hacer pirulas raras en la lógica de la aplicación para que el comportamiento fuera el adecuado. Al menos con las herramientas que he trabajado no podíamos hablar de algo tan trivial como lo que sigue a continuación.

En Symfony2 hacer una redirección 301 porque no nos gustan las urls de nuestra web y no queremos perder todo ese tráfico ya indexado es tan sencillo como definir una ruta a mayores en el routes.yml correspondiente de la siguiente forma:

ruta_redirect:
    pattern:  /vieja-url/{param1}/{param2}
    defaults:
        _controller: "FrameworkBundle:Redirect:redirect"
        param1: ''
        param2: ''
        route: ruta_nueva
        permanent: true

ruta_nueva:
    pattern:  /nueva-url-molona/{param1}/{param2}
    defaults: { _controller: MiBundle:Default:miController, param1: '', param2: '' }

Como véis la solución no pasa ni por tocar .htaccess -lo cual me parece una locura si algún día quieres prescindir de Apache- ni agregar más complejidad en los controladores. Simplicity is divine.

Entrando un poco ya en "mode +picado on" pensé que si en un framework de nueva generación para PHP como es Symfony2 era tan sencillo, seguro que en su similar para Python también existía una solución igual de decente. Así que me puse a buscar cómo podía resolver el mismo problema en Django, se asemejaría bastante a lo siguiente (ojo que no lo he probado, pero también pinta trivial, documentación oficial):

urlpatterns += patterns('django.views.generic.simple',
    (r'^vieja-url/(?P<param1>[-\w]+)/(?P<param2>[-\w]+)/$', 'redirect_to', {'url': '/nueva-url-molona/%(param1)s/%(param2)s/'})
    (r'^nueva-url-molona/(?P<param1>[-\w]+)/(?P<param2>[-\w]+)/$',MiController.as_view(), {}, "ruta_nueva"),
)

Está claro que muchas veces se trata de tener el conocimiento adecuado, rodearse de la gente adecuada y usar las herramientas correctas para convertir un problema en una mera anécdota.

django code

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.