.htaccess Laravel中的自定义slug(URL)(可以选择使用htaccess)

.htaccess Laravel中的自定义slug(URL)(可以选择使用htaccess),.htaccess,laravel-5,routing,slug,.htaccess,Laravel 5,Routing,Slug,我从数据库里找到了这样的路线 $cat_routes = App\User::list_routes(); foreach ($cat_routes as $route){ Route::get('/category/{'.$route->route.'}', CategoriesController@getCategoryByRoute'); } 要访问此类别,URL将为: domain.com/category/cars (or any category rather th

我从数据库里找到了这样的路线

$cat_routes = App\User::list_routes();

foreach ($cat_routes as $route){
    Route::get('/category/{'.$route->route.'}', CategoriesController@getCategoryByRoute');
}
要访问此类别,URL将为:

domain.com/category/cars (or any category rather than cars)
是否仍然可以创建自定义URL或slug来更改URL,如下所示:

domain.com/cars (clothes, women, watches .... etc)
public function getCategoryByRoute($category_route)
因此,当用户点击像“domain.com/category/cars”这样的链接时,他会被重定向到“domain.com/cars”,控制器会将其作为“category/cars”类别进行处理

函数如下所示:

domain.com/cars (clothes, women, watches .... etc)
public function getCategoryByRoute($category_route)
这可以从Laravel或htaccess完成吗

请注意,我还有其他短URL,如

domain.com/gallery
domain.com/login
......
所以我不想重定向或缩短所有URL。只有类别URL。

将路由放在最后:

Route::get('/gallery', '...');
Route::get('/login', '...');

Route::get('/category/{category}', 'CategoriesController@getCategoryByRoute');
Route::get('/{category}', 'CategoriesController@getCategoryByRoute');
当您在控制器中找不到该类别时,请执行例外操作。

将路由放在最后:

Route::get('/gallery', '...');
Route::get('/login', '...');

Route::get('/category/{category}', 'CategoriesController@getCategoryByRoute');
Route::get('/{category}', 'CategoriesController@getCategoryByRoute');

当您在控制器中找不到该类别时,请抛出一个异常。

部分答案是关于重定向的。代替.htaccess,您可以在Laravel本身中完成它。更好,因为如果你转向Nginx(或其他东西),你不必担心“htaccess中的应用程序逻辑”

说明:

  • 它包含以“/category/x”开头的所有内容,其中x可以是[a-z]、[0-9]和破折号范围内的任何内容
  • 它使用该输入获取重定向路径
  • 它返回一个重定向
显然,您需要额外的路由来捕获这些重定向

Route::get('/{categorySlug}', 'CategoriesController@getCategoryByRoute');
顺便说一句,此解决方案中的默认重定向状态为302(临时移动)。如果您想要301(永久移动):


你的部分回答是关于重定向的。代替.htaccess,您可以在Laravel本身中完成它。更好,因为如果你转向Nginx(或其他东西),你不必担心“htaccess中的应用程序逻辑”

说明:

  • 它包含以“/category/x”开头的所有内容,其中x可以是[a-z]、[0-9]和破折号范围内的任何内容
  • 它使用该输入获取重定向路径
  • 它返回一个重定向
显然,您需要额外的路由来捕获这些重定向

Route::get('/{categorySlug}', 'CategoriesController@getCategoryByRoute');
顺便说一句,此解决方案中的默认重定向状态为302(临时移动)。如果您想要301(永久移动):


把代码放在路线的末尾,现在就可以了,非常感谢。把代码放在路线的末尾,现在就可以了,非常感谢。