2012-09-13 47 views
1

随着Zend框架,我想建立一个网址,以搜索引擎友好的URLZend框架重写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

在我的引导文件,我已经试过这

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); 

任何人都可以帮助我吗?

回答

1

我认为你不需要正则表达式来满足你的需要。 如果你想例如这个网址: http://mysite.com/category/cars.htmlhttp://mysite.com/categories/category/id/2就够用Zend_Controller_Router_Route的

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

后,我们拥有了一个可以建立一个注册自定义路线引导文件的功能,或者在某些插件像这样的:

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);

1

我认为你走错了路,因为SEO友好不是.html或.php的意思,如果你的产品名称在基本网址之后开始,就像“http://www.promotepassion.com/classical/rock”,意思是基本路径,然后是类别名称,然后是产品名称,如果我们然后使用所有搜索引擎通话页面。

相关问题