【问题标题】:Laravel routing - shorten the urls upto only one URI segment.Laravel 路由 - 将 url 缩短到只有一个 URI 段。
【发布时间】:2014-09-29 00:43:29
【问题描述】:

据说 URL 越短,seo 越好(至少我的客户相信它)。

现在我在 laravel 中创建类似于 watchtown.co.uk 的网站。我需要以这样的方式生成 uri 不应该超过一个段。

要求

我有以下网址:

1.需要更改自:

localhost/laravelproj/public/brands/brandname/watches

localhost/laravelproj/public/brandname-watches.html

2.需要更改自:

localhost/laravelproj/public/brands/brandname/jewellery

localhost/laravelproj/public/brandname-jewellery.html

3.需要更改自:

localhost/laravelproj/public/categories/categoryname/watches

localhost/laravelproj/public/categoryname-watches.html

4.需要更改自:

localhost/laravelproj/public/categories/categoryname/jewellery

localhost/laravelproj/public/categoryname-jewellery.html

5.需要更改自:

localhost/laravelproj/public/products/productname

localhost/laravelproj/public/productname-watches.html

我希望你理解这个模式。 我可以看到watchtown.co.uk 做了完全相同的事情(或者是其他方式吗?)

我在控制器中为品牌创建了这个功能:

    public function showProductListingByBrands($brandSlug) {

    $brand = Brand::findBySlug($brandSlug)->first();
    $products = "";
    if($brand){
        $products = $brand->products()->paginate(Misc::getSetting('paginate'));
    }
    $products = Product::findBySlug($brandSlug);
    return View::make('store');
}

现在我该如何操作它作为我的要求?我真的是 laravel 的新手。

提前致谢。

【问题讨论】:

  • 抓头,一定要.html吗?
  • @BrianCoolidge 是的.. 它必须.. :)
  • 在这种情况下,您作为开发人员,将您的知识(尽可能以外交方式)传授给您的客户,了解从 SEO 的角度来看他们的信念为什么是错误的,并且通过这样做,他们是使网址变得丑陋且缺乏表现力。此外,您正在访问 一个 PHP 文件 index.php,通过将 .html 放在末尾而没有一些讨厌的 .htaccess 规则,您将用这个将头撞到砖墙上.
  • 哇......我不知道......谢谢@DavidBarker,你有什么建议?我不应该这样做吗?实际上,我正在将电子商务网站重新创建为 watchtown.. 它在 watchtown 中具有相同的 url 结构。我还认为将丢失的(旧)网址重定向到新网址可以节省时间。所以我只是告诉客户我会尝试。
  • @Geniusintrouble,我了解到的关于客户和开发人员关系的另一个提示是,不要总是同意客户。如果您认为这不是一个好主意,请告诉他,并提出更好的方法。如果您觉得这会很痛苦,或者您不喜欢这样做,请说出另一种方法。

标签: laravel laravel-4 routing url-routing


【解决方案1】:

只是给你一个简短的想法。

在您的路线页面上

Route::get('/{product_name}/', array(
    'as'   => 'product_page',
    'uses' => 'ProductPage@getProduct'
));

正如您在用户访问页面时看到的那样

示例:www.website.com/watch

它将通过getProduct的方法到达控制器ProductPage,因此变量{product_name}将传递给控制器​​。

控制器

public function getProduct($product_name = false) {

    $product = Products::where('product_name', '=', $product_name);

    // Do check product existing record
    if ($product->count() == 0) {
        return  Redirect::route('some-page-error')
                ->with('failure', 'The hell are you doing?');
    } else {
        $product = $product->first();
        return  View::make('product_page')
                ->with('product_name', $product);
    }
}

等等方法getProduct,参数$product_name就是watch

所以,该方法将检查产品是否存在,如果不存在,用户将被重定向到 404 页面。

如果没有,它将被重定向到您制作的模板,然后传递所有产品数据并在那里显示。

但是,如果您将 Route 放入 /product/{product_name} 会很好,如果它是产品 id 而不是产品名称也会很好,因为产品名称可能会变得多余。

所以是的。

编辑

我不知道您要做什么以及为什么它必须是 .html,但是嗯.. 只是想给您一个想法。好吧我不知道我的回答是不是一个好方法,有人可能会给出比我更好的答案。

【讨论】:

  • 感谢您的帖子.. 我学到了一些东西 :).. 但这不是我期待的答案。我需要添加 .html,因为客户端就在那里。如果我按照你说的做了.. 并且想要导航页面不会'它会搜索名称为 about 的产品?
猜你喜欢
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多