To optimize search engine optimization (SEO), I needed to redirect all requests containing uppercase letters to their lowercase equivalents last week.
Example:
源 URL | 目标 URL |
---|---|
/location/Atlanta | /location/atlanta |
/docs/Laravel-Middleware | /docs/laravel-middleware |
At the same time, this solution should not change any query parameters:
源 URL | 目标 URL |
---|---|
/locations/United-States?search=Georgia | /location/united-states?search=Georgia |
It turns out that we only need to write a few lines of code in the Laravel middleware to achieve it! First, we get the path from the request and check if it is the same in lowercase. If it is not the same, we can use the url()->query()
method to append the query string back to the lowercase version of the path and redirect it to the lowercase path permanently.
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class RedirectUppercase { /** * 处理传入请求。 * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { $path = $request->path(); if (($lower = strtolower($path)) !== $path) { $url = url()->to($lower)->appendQuery($request->query()); // 使用更简洁的链式调用 return redirect($url, 301); } return $next($request); } }
To register the middleware in the Laravel 11 application, I attached it to the bootstrap/app.php
middleware group in the web
file.
<?php return Application::configure(basePath: dirname(__DIR__)) ->withRouting( // ... ) ->withMiddleware(function (Middleware $middleware) { $middleware->appendToGroup('web', \App\Http\Middleware\RedirectUppercase::class); });
Note: You may need to exclude this middleware from routes using a signed URL or other case-sensitive use cases.
I'm sure it can be done with Nginx or Apache, but this is by far the easiest solution, and it works for all environments of your application. I don't have to remember to make any changes on the new server.
The above is the detailed content of How to Redirect Uppercase URLs to Lowercase with Laravel Middleware. For more information, please follow other related articles on the PHP Chinese website!