我正在使用 Zend Framework 做一个项目
用户将能够在网站上发布公告。
现在您可以使用格式如下的 URL 咨询他们(对于 id = 60 的公告)
mysite.com/announcement/view/id/60
为了更好的 SEO,我想要的结果是
mysite.com/announcement/[CITY NAME]/[ZIPCODE]/[TYPE OF GOOD]/[STREET NAME]-[ID]
所有 [VARIABLE] 都存储在数据库中并且易于访问。
但是,我提出的解决方案效率很低,所以我想知道进行 URL 重写的不同方法,以及最有效的方法。
目前,我考虑过当用户在数据库中发布公告时以“硬”方式生成 URL,并在用户连接时在我的 Bootstrap.php 中创建新路由。 这看起来不错,但我认为当公告量很大时可能需要很长时间。
我想到的第二个解决方案是直接在文件中生成 URL,例如 .xml 文件,当用户也连接时我可以加载它,但这会带来同样的问题。
有没有一种方法可以有效地创建这些路由?
Apache 的 RewriteEngine 的解决方案对于那种想要的行为似乎不是很灵活......
对于信息来说,公告量大概率会超过10000条,效率问题比较大。
最佳答案
最好的解决方案是使用 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。
关于php - 重写 URL 的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16927541/