gpt4 book ai didi

Laravel - 在路由中附加一个尾部斜线

转载 作者:行者123 更新时间:2023-12-02 04:43:29 25 4
gpt4 key购买 nike

正如我在这里多次提到的,我正在使用 Laravel 重做我的一个旧网站。

我遇到的另一个问题是:

  • 我在旧网站上主要有两种不同类型的网址:
    • /user-slug/ 作为用户主页,
    • /user-slug/content-slug.html 其内容之一

我设法重新创建了第二个,但是 Laravel 总是在我尝试创建到用户路由的链接时修剪最后一个斜线,并且我以一个像 /user-slug 这样的 url 结尾。 p>

我不想在将旧网站切换到 Laravel 时丢失任何 SEO,所以我想知道是否可以强制 Laravel 在一个 url 上附加尾部斜线?


到目前为止我的代码:

应用\供应商\RouteServiceProvider.php :

public function boot(Router $router)
{
$router->pattern('user', '[a-zA-Z0-9_-]+');
$router->pattern('content', '[a-zA-Z0-9_-]+');
parent::boot($router);
}

应用\Http\routes.php :

Route::group(['middleware' => ['web']], function () {
Route::get('/', [
'as' => 'index',
'uses' => 'BaseController@index',
]);

Route::get('/{user}/', [
'as' => 'user',
'uses' => 'UserController@show',
]);

Route::get('/{user}/{content}.html', [
'as' => 'content',
'uses' => 'ContentController@show',
]);
});

View /home.blade.php :

{!! Html::linkRoute('user', $content['user']['name'], [$content->user->slug]) !!}

如果没有解决方法,我将使用 .htaccess 文件将所有 /user-slug/ url 重定向到 /user-slug,但如果我能避免它,那就太好了。

最佳答案

嗯,我认为它看起来可能通过中间件,例如。

  1. $ php artisan make:middleware slashesMiddleware
  2. 转到 app/Http/Middleware/slashesMiddleware.php 并用此内容填充它

    <?php

    namespace App\Http\Middleware;
    use Closure;

    class slashesMiddleware
    {
    /**
    * Handle an incoming request.
    *
    * @param \Illuminate\Http\Request $request
    * @param \Closure $next
    * @return mixed
    */
    public function handle($request, Closure $next, $flag)
    {
    if ($flag=="remove") {
    if (ends_with($request->getPathInfo(), '/')) {
    $newval = rtrim($request->getPathInfo(), "/");
    header("HTTP/1.1 301 Moved Permanently");
    header("Location:$newval");
    exit();
    }
    } else {
    if (!ends_with($request->getPathInfo(), '/')) {
    $newval =$request->getPathInfo().'/';
    header("HTTP/1.1 301 Moved Permanently");
    header("Location:$newval");
    exit();
    }
    }
    return $next($request);
    }
    }
  3. 这添加 2 个方法首先“添加”尾部斜杠到路由或“删除”

  4. 将你应用的中间件列表添加到 app/Http/Kernel.php 数组 $routeMiddleware

        protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'slashes' => \App\Http\Middleware\slashesMiddleware::class,
    ];
    1. 最后将它添加到你想要的任何路由,或者你可以将它添加到 $middleware 数组中的所有路由

使用示例

Route::get('/compare', 'WebRouteController@compare')->middleware("slashes:add");

关于Laravel - 在路由中附加一个尾部斜线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35285947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com