Nuevo en Symfony 4.1: redirecciones inteligentes

Históricamente las URL han seguido el modelo de UNIX que añade una barra al final en los directorios pero no en los archivos:

  • https://example.com/foo/ se considera un directorio llamado foo
  • https://example.com/foo se considera un archivo sin extensión llamado foo

Aunque es posible servir contenidos diferentes para /foo y /foo/ (de hecho, Google también lo admite) hoy en día es común tratar a las dos URLs como la misma y redirigir entre ellas.

Desde su primera versión Symfony ha solucionado una de las dos partes de este problema. Si una ruta define un path con una barra al final, las dos URLs funcionan sin problemas (y la URL sin barra redirige automáticamente a la otra):

# config/routes.yaml
foo_route:
    path: '/foo/'
    controller: App\Controller\DefaultController::foo

En este ejemplo, una petición GET /foo/ devuelve una respuesta 200 y una petición GET /foo devuelve una respuesta 301 (Moved Permanently) que redirige a /foo/. Este mecanismo solo se aplica en las peticiones GET y HEAD.

En Symfony 4.1 hemos mejorado el router para que también soporte el otro lado de este problema (redirigir URLs con barra a URLs sin barra). Por ejemplo:

# config/routes.yaml
foo_route:
    path: '/foo'
    controller: App\Controller\DefaultController::foo

Antes de Symfony 4.1, la petición GET /foo/ resultaba en una respuesta de tipo 404. En Symfony 4.1, esa misma petición resulta en una redirección 301 a /foo, por lo que la redirección de "la barra del final" por fin funciona en los dos sentidos.

Esta funcionalidad fue contribuida por Nicolas Grekas en el pull request #26283.

Fuente: New in Symfony 4.1: Smarter URL redirections

Comentarios

Publicada el

8 de marzo de 2018

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.