使用 Laravel 中间件将大写 URL 重定向到小写

发布于 作者

How to Redirect Uppercase URLs to Lowercase with Laravel Middleware image

上周,我需要将所有包含大写字母的请求重定向到其小写等效项,以进行 SEO 优化。

例如

/location/Atlanta /location/atlanta
/docs/Laravel-Middleware /docs/laravel-middleware

同时,解决方案不应该改变任何查询参数

/locations/United-States?search=Georgia /location/united-states?search=Georgia

事实证明,我们只需要在 Laravel 中间件中添加几行代码就可以实现!首先,我们从请求中获取路径,并检查它是否与小写形式相同。如果不是,我们可以使用 url()->query() 方法将查询字符串追加到路径的小写版本,并永久重定向到小写路径。

<?php
 
namespace App\Http\Middleware;
 
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
 
class RedirectUppercase
{
/**
* Handle an incoming request.
*
* @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()->query($lower, $request->query());
 
return redirect($url, 301);
}
 
return $next($request);
}
}

为了在 Laravel 11 应用中注册中间件,我在 bootstrap/app.php 文件中将其追加到 web 中间件组。

<?php
 
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
// ...
)
->withMiddleware(function (Middleware $middleware) {
$middleware->appendToGroup('web', \App\Http\Middleware\RedirectUppercase::class);
});

注意:您可能希望将此中间件从使用签名 URL 或其他区分大小写的用例的路由中排除。

我相信 Nginx 或 Apache 也可能有解决方案,但对我来说,这无疑是最简单的解决方案,而且它适用于应用的所有环境。我不必记住在新服务器上进行任何更改。

Jason Beggs photo

TALL 堆栈(Tailwind CSS、Alpine.js、Laravel 和 Livewire)顾问,也是 designtotailwind.com 的所有者。

Cube

Laravel 新闻通讯

加入 40,000 多名其他开发人员,绝不错过新的提示、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成和对本地和生产环境的即时反馈进行调试。

Tinkerwell
No Compromises logo

无妥协

Joel 和 Aaron,来自无妥协播客的两位经验丰富的开发人员,现在可以为您的 Laravel 项目聘用。 ⬧ 固定费率 7500 美元/月。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 退款保证。

无妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,让您的应用程序保持新鲜。

Shift
Bacancy logo

Bacancy

仅需 2500 美元/月,即可用拥有 4-6 年经验的经验丰富的 Laravel 开发人员为您的项目增值。获得 160 小时的专项专业知识和 15 天无风险试用。立即安排电话!

Bacancy
Lucky Media logo

Lucky Media

立即获得幸运 - Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar:Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的强大功能带到 Laravel。

Lunar:Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动套件

SaaSykit 是一款 Laravel SaaS 启动套件,它包含运行现代 SaaS 所需的所有功能。支付、精美结账、管理面板、用户仪表板、身份验证、现成组件、统计信息、博客、文档等。

SaaSykit:Laravel SaaS 启动套件
Rector logo

Rector

您无缝升级 Laravel、降低成本和加速创新的合作伙伴,为成功企业提供支持

Rector
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成来增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务性、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。探索 MongoDB 的灵活、现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的无依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

在您的 Laravel 应用程序中添加 Swagger UI

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel 提示构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包为您的 Laravel 应用程序添加评论

阅读文章