Laravel 制作短网址

Posted

技术标签:

【中文标题】Laravel 制作短网址【英文标题】:Laravel making a short URL 【发布时间】:2020-07-01 09:42:39 【问题描述】:

我想在 laravel 应用程序中删除 URL 的一部分以使 url 更短。

这是我的路线定义:

Route::get('/category/slug','CourseController@courseCategory');
Route::get('/course/slug','CourseController@detail');

例如,我有客户服务和睡眠护理类别。还有一个名为 Sleep care lvl 1 的课程。所以我可以通过这些链接访问类别和课程:

mydomain.com/category/customer-service mydomain.com/category/sleep-care mydomain.com/course/sleep-care-lvl-1

我可以知道如何通过删除 URL 中的类别和课程来缩短 URL,然后 URL 将变为:

mydomain.com/customer-service mydomain.com/sleep-care mydomain.com/sleep-care-lvl-1

非常感谢!

【问题讨论】:

更新你的路由并创建一个可以区分课程和类别的控制器方法 有一种方法可以做到这一点,您可以创建一个控制器来处理您的路由并执行类似 switch 语句的操作来处理它应该采取的操作,但老实说不是一个好方法。路线和名称应遵循一致的约定 @kerbholz。就像德文格雷说的一样。我们必须处理在课程和类别之间切换。还有其他路线在我的应用程序中具有单一名称,例如联系人和关于页面。他们也是 mydomain/contact , mydomain/about 第二,你不应该改变它,它现在的样子已经很完美了 /contact 和 /about 不应干扰您的类别/课程路线。首先定义它们,你就可以开始了。但是,如果您有一个名为“联系人”的类别或课程,您会遇到问题。 【参考方案1】:

最后,路由只是字符串。

实现您想要做的最简单的方法是更新路线

Route::get('/category/slug','CourseController@courseCategory');
Route::get('/course/slug','CourseController@detail');

会变成

Route::get('my-short-route','CourseController@courseCategory');
Route::get('my-other-short-route','CourseController@detail');

但这并不能解决您的问题,也不是一个好的解决方案,

但确实是一个兴趣点。

如果不重构整个应用程序,您尝试做的事情是不可能的。没有 .htaccess 可以对此有所帮助,因为您需要有一个进入应用程序的入口点。

该入口点不能是通配符变量。

意味着你不能这样做

Route::get('slug','CourseController@courseCategory');

因为这将作为一个包罗万象

你可以做类似的事情

mydomain.com/this-is-a-random-string

这将触发CourseController 上的courseCategory 方法

它是正确的约定方式,我不会改变它

【讨论】:

以上是关于Laravel 制作短网址的主要内容,如果未能解决你的问题,请参考以下文章

t.cn短网址怎么生成?利用新浪短链接转化器生成永久短网址的几种方法

HTACCESS 短网址并修改我的网址

t.cn短网址 新浪短网址链接生成器的技术原理分析推荐第一章(分析篇)

短网址服务

短网址

数据结构与算法简记--实现一个短网址系统