我有这样的路由来自数据库
AllTargets
要访问此类别,URL为:
$cat_routes = App\User::list_routes();
foreach ($cat_routes as $route){
Route::get('/category/{'.$route->route.'}', CategoriesController@getCategoryByRoute');
}
总有这样的方法来创建自定义URL或slug来更改URL:
domain.com/category/cars (or any category rather than cars)
因此,当用户单击诸如“ domain.com/category/cars”之类的链接时,他将被重定向到“ domain.com/cars”,并且控制器将其始终视为“ category / cars”类别。
函数如下:
domain.com/cars (clothes, women, watches .... etc)
这可以通过Laravel或htaccess完成吗?
请注意,我还有其他短网址,例如
public function getCategoryByRoute($category_route)
因此,我不想重定向或缩短所有URL。只是类别网址。
答案 0 :(得分:1)
将路线放在最后:
Route::get('/gallery', '...');
Route::get('/login', '...');
Route::get('/category/{category}', 'CategoriesController@getCategoryByRoute');
Route::get('/{category}', 'CategoriesController@getCategoryByRoute');
当在控制器中找不到类别时,抛出异常。
答案 1 :(得分:1)
您的答案的一部分与重定向有关。可以使用Laravel本身来代替.htaccess。更好,因为如果您迁移到Nginx(或其他工具),则不必担心“ htaccess中的应用程序逻辑” ...
Route::get('/category/{categorySlug}', function($categorySlug) {
$redirectPath = sprintf('/%s', $categorySlug);
return redirect($redirectPath);
})->where('categorySlug', '[a-z0-9-]+');
说明:
很明显,您需要额外的路由来捕获这些重定向...
Route::get('/{categorySlug}', 'CategoriesController@getCategoryByRoute');
顺便说一句,此解决方案中的默认重定向状态为302(临时移动)。如果您想使用301(永久移动):
redirect($redirectPath, 301);
答案 2 :(得分:0)
尝试在htaccess中使用RewriteRule
。
RewriteEngine on
RewriteRule ^/category/(.*) /$1 [QSA]
以下是与此相关的文档:Apache Mod Rewrite