我需要使用SEO友好的分层URL在Laravel中创建一个网站(电子商店)。
一些例子是:
www.example.com/cat1/cat11
(指向类别产品列表)www.example.com/cat1/cat11/cat111
(指向类别产品列表)www.example.com/cat1/cat11/cat111/product-title
(指向产品详细信息页面)www.example.com/contact-us
(指向页面)我可以解析上面的URL并找到所需的段,但是我不确定哪个控制器将负责每个路由。
可能的想法:
1)为每个URL类型添加前缀,以便了解控制器 例如
www.example.com/categories/cat1/cat11/cat111
> CategoryController www.example.com/products/cat1/cat11/cat111/product-title
> ProductController www.example.com/page/contact-us
> PageController 2)预生成所有站点URL并将其存储在表中。该表可以包含两列:URL(cat1 / cat11 / cat111)和model:id(类别:8) 全局控制器将解析URL,使用该表可以加载所需的模型和ID。
还有其他想法吗?
答案 0 :(得分:0)
我们已经多次遇到这个问题。我认为没有“最佳方法”。这取决于给定的情况。
/products/cat1/cat11/cat111/product-title
结构应谨慎使用。如果未正确添加规范标签,则可能导致重复的内容问题。
我们完成了以下设置:
Route::get('/shop/{slug}', [\App\Http\Controllers\ProductController::class, 'show'])->name('product.show');
Route::get('/shop/categories/{slugNum}', [\App\Http\Controllers\CategoryController::class, 'show'])->name('category.show')->where('slugNum', '(.*)');
Route::get('/{any}', [\App\Http\Controllers\PageController::class, 'show'])->name('page.show')->where('any', '.*')->fallback();
希望这会有所帮助。