0

我需要使用 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 并找到所需的 slug,但我不确定哪个控制器将负责每条路由。

可能的想法:

1) 为每个 URL 类型添加前缀,以便了解控制器,例如

  • www.example.com/categories/cat1/cat11/cat111> 类别控制器
  • www.example.com/products/cat1/cat11/cat111/product-title> 产品控制器
  • www.example.com/page/contact-us> 页面控制器

2) 预先生成所有站点的 URL 并将其存储在一个表中。该表可以包含两列:URL (cat1/cat11/cat111) 和 model:id (category:8) 全局控制器将解析 URL 并使用该表可以加载所需的模型和 id。

还有什么想法吗?

4

1 回答 1

1

我们已经多次面临这个问题。我认为没有“最好的方法”。这取决于给定的情况。

该结构/products/cat1/cat11/cat111/product-title应谨慎使用。如果未正确添加规范标签,可能会导致重复内容问题。

我们以以下设置结束:

  • www.site.com/shop/product-title >Route::get('/shop/{slug}', [\App\Http\Controllers\ProductController::class, 'show'])->name('product.show');
  • www.site.com/shop/categories/cat1/cat11/cat111 >Route::get('/shop/categories/{slugNum}', [\App\Http\Controllers\CategoryController::class, 'show'])->name('category.show')->where('slugNum', '(.*)');
  • www.site.com/contact-us >Route::get('/{any}', [\App\Http\Controllers\PageController::class, 'show'])->name('page.show')->where('any', '.*')->fallback();

希望这可以帮助。

于 2019-05-31T13:55:06.323 回答