【问题标题】:Zend Framework rewrite urls to SEO friendly URLZend Framework 将 url 重写为 SEO 友好的 URL
【发布时间】:2012-09-06 12:01:36
【问题描述】:

使用 Zend 框架,我正在尝试构建一个对 SEO 友好的 URL 的 URL

http://ww.website.com/public/index/categories/category/2
应该由http://ww.website.com/public/index/categories/category.html映射

http://ww.website.com/public/index/products/category/2/subcategory/2
应该由http://ww.website.com/public/index/products/product.html映射

在我的 Bootstrap 文件中我已经尝试过这个

protected function _initRoutes()
{ 
    $frontController = Zend_Controller_Front::getInstance ();
    $router = $frontController->getRouter ();
    $route = new Zend_Controller_Router_Route_Regex(
        'index/categories/category/(\d*)/',
        array('module' => 'default','controller' => 'index','action' => 'categories'), 
        array(1 => 'category'),
        'index/categories/%d-%s.html');

    $router->addRoute('category', $route);
}

现在我的问题是如何重写这个 URL?我还使用以下 URL 中的 ID 检索产品或类别:

$id = $this->_getParam('category', 0 ); 

谁能帮帮我?

【问题讨论】:

    标签: php zend-framework url-rewriting


    【解决方案1】:

    我认为你选择了错误的路径,因为 SEO 友好对 .html 或 .php 没有意义所有搜索引擎快速调用页面。

    【讨论】:

      【解决方案2】:

      我认为您不需要 Regex 路由来满足您的需要。 例如,如果您想要此网址: http://mysite.com/category/cars.htmlhttp://mysite.com/categories/category/id/2 就够用 Zend_Controller_Router_Route

      现在只有一个问题 Zend Router 不会知道要映射的类别的 id,为此您需要将自定义路由存储到数据库或文件中;每个自定义路由都将包含映射的 url 和所需参数(控制器名称、操作名称、类别 ID)。

      之后,我们可以构建一个函数,将自定义路由注册到引导文件,或者在类似这样的插件中:

      public function setRoute($params){
          $router = Zend_Controller_Front::getInstance()->getRouter();
          $params = array(
              'controller' => $params['controller'],
              'action'     => $params['action'],
              'id'         => $params['id']
              );
          $route = new Zend_Controller_Router_Route($params['url'], $params);
          $router->addRoute($params['url'], $route);
      }
      

      现在假设$params['url'] 具有值:http://mysite.com/category/cars.html,当浏览器请求该 url ZF 将匹配我们的自定义路由并将请求转发到$params['controller'] 中的指定控制器,并在$params['action'] 中调用指定操作时,将设置为来自$params['id'] 的名为id 值的参数,可以使用$id = $this->_getParam('id',0); 从控制器中检索到

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-17
        • 2021-07-06
        • 2018-07-01
        • 1970-01-01
        • 2015-07-30
        • 2015-10-23
        • 2015-01-04
        • 2011-10-21
        相关资源
        最近更新 更多