最有效的重写URL方式

时间:2013-06-04 21:10:42

标签: php apache zend-framework url-rewriting seo

我正在使用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,因此效率问题相当大。

2 个答案:

答案 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