使用Zend Framework,我正在尝试构建一个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中的ID检索产品或类别:
$id = $this->_getParam('category', 0 );
有人可以帮助我吗?
答案 0 :(得分:1)
我认为您不需要Regex路线来满足您的需求。
如果你想要这个例子这个网址:
转到http://mysite.com/category/cars.html
http://mysite.com/categories/category/id/2
就足以使用Zend_Controller_Router_Route
现在只有一个问题Zend Router不会知道要映射的类别的id,为此你需要将自定义路由存储到数据库或文件中;每个自定义路由都将包含映射和所需参数的URL(控制器名称,操作名称,类别ID)。
在我们完成之后,我们可以构建一个函数,将自定义路由注册到bootstrap文件,或者在这样的插件中:
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
当从浏览器请求网址ZF将匹配我们的自定义路由并转发请求到$params['controller']
中的指定控制器时,并调用指定的操作在$params['action']
中,将设置为$params['id']
中名为id的参数,可以使用$id = $this->_getParam('id',0);
答案 1 :(得分:1)
我认为你选择了错误的路径因为SEO友好并不意味着.html或.php如果你的产品名称在基本网址之后开始喜欢“http://www.promotepassion.com/classical/rock”意味着基本路径然后类别名称然后产品名称,如果我们然后使用所有搜索引擎快速调用页面。