我正在使用Zend Framework
开展项目用户可以在网站上发布公告。
现在,您可以使用格式为(对于id = 60的公告)
的网址查询它们mysite.com/announcement/view/id/60
我想要的结果是,为了更好的搜索引擎优化,将采用
的形式mysite.com/announcement/[CITY NAME]/[ZIPCODE]/[TYPE OF GOOD]/[STREET NAME]-[ID]
所有[VARIABLE]都存储在数据库中并且易于访问。
然而,我提出的解决方案效率很低,所以我想知道进行URL重写的不同方法,以及最有效的方法。
现在,当用户在数据库中发布公告时,我想到了以“硬”方式生成URL,并在用户连接时在我的Bootstrap.php中创建新路由。 这似乎没问题,但我认为宣布的数量很大可能需要很长时间。
我想到的第二个解决方案是直接生成文件中的URL,如.xml文件,我可以在用户连接时加载,但这会产生同样的问题。
有没有办法有效地创建这些路线?
Apache的RewriteEngine解决方案对于那种想要的行为似乎不太灵活......
据了解,公告量很可能超过10 000,因此效率问题相当大。
答案 0 :(得分:2)
使用zend框架,您不必将每个端点分配为仅拥有布局
$route = new Zend_Controller_Router_Route(
'announcement/:city_name/:zipcode/:type_of_good/:street_name/:id',
array("controller"=>"accouncement", "action"=>"view-details"));
在控制器中,您可以将它们用作
$this->_request->getParam("zipcode");
答案 1 :(得分:2)
最佳解决方案是使用Zend_Controller_Router_Route_Regex
实施例
$route = new Zend_Controller_Router_Route_Regex(
'announcement/(.*?)/(.*?)/(.*?)/(.*?)\-([0-9]*)',
array(
'announcement' => 'archive',
'action' => 'view'
),
array(
1 => 'city_name',
2 => 'zipcode',
3 => 'type_of_good',
4 => 'street_name',
5 => 'id'
)
);
$router->addRoute('archive', $route);
它会将子模式分配给变量,其中1 =>是第一个子模式,2是第二个子模式等。这些变量将在操作方法中使用,例如$this->_getParam('zipcode');
您可以根据需要调整 REGEX 。