Estoy rediseñando un sitio web antiguo que está construido con código personalizado, y ahora estamos usando el marco Laravel (versión 5.3). El problema es que el sitio web antiguo tiene todos los enlaces con barras inclinadas. Tiene un excelente SEO y muchas visitas de motores de búsqueda, por lo que eliminar las barras inclinadas no es la opción.

En mi archivo routes / web.php tengo las siguientes rutas:

$router->get('texts/', 'TextController@index');
$router->get('texts/{slug}/', 'TextController@category');
$router->post('texts/search/', 'TextController@searchPost');
$router->get('texts/search/', 'TextController@search');

Mostrar enlaces en vistas html / blade con barras inclinadas no es el problema, el problema es redireccionar a enlaces de ruta.

Aplicación / Http / Controllers / TextController.php

public function searchPost()
{
    ...

    return $this->response->redirectToAction('TextController@search');
}

Esto me redirige a " textos / búsqueda " en lugar de " textos / búsqueda / ". ¿Hay alguna opción para activar / desactivar las barras inclinadas en Laravel o alguna forma hacky de solucionar esto? La redirección .htaccess no es la solución porque agrega una redirección más y ralentiza el sitio web.

0
fsasvari 14 dic. 2016 a las 13:18

2 respuestas

La mejor respuesta

Lo descubrí, necesitaba extender la clase UrlGenerator.

Creado TrailingSlashUrlGenerator.php dentro de la carpeta Aplicación / Biblioteca :

namespace App\Library;

use Illuminate\Routing\UrlGenerator;

class TrailingSlashUrlGenerator extends UrlGenerator
{
    /**
     * Format the given URL segments into a single URL.
     *
     * @param  string  $root
     * @param  string  $path
     * @param  string  $tail
     * @return string
     */
    protected function trimUrl($root, $path, $tail = '')
    {
        return parent::trimUrl($root, $path, $tail).'/';
    }
}

Cree RoutingServiceProvider en la carpeta Aplicación / Proveedores :

public function register()
{
    $this->app['url'] = $this->app->share(function($app) {
        $routes = $app['router']->getRoutes();
        $app->instance('routes', $routes);

        $url = new TrailingSlashUrlGenerator(
            $routes, $app->rebinding('request', $this->requestRebinder())
        );

        $url->setSessionResolver(function ($app) {
            return $app['session'];
        });

        return $url;
    });
}

Registrar proveedor en config / app.php :

App\Providers\RoutingServiceProvider::class,
0
fsasvari 14 dic. 2016 a las 11:53

Creo que esto podría ser útil https: //www.neontsunami. com / posts / redirect-trailing-slashes-in-laravel-5

Simplemente ajústelo a sus necesidades, puede eliminar la llamada a la función rtrim y probar el método Redirect :: to.

0
knaos 14 dic. 2016 a las 10:30