php - 重写 URL 的最有效方法

标签 php apache zend-framework url-rewriting seo

我正在使用 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/

相关文章:

php - 在 Amazon Elastic Beanstalk(Apache、EC2)上安装 Mod_security

zend-framework - Zend 框架 : Models, 映射器;映射器中的默认字段和模型中的字段操作?

zend-framework - 在 Zend Form 中写入超链接?

php - Laravel 观察者不处理批量插入

apache - 在 OS X Mavericks 10.9 上安装 apache 2.4

PHP : set client base URL with singleton

java - 即使我安装了 apache 服务也找不到

mysql - zend 框架中是否存在任何自动问题,例如 mysql 表中的创建和修改日期?

php - 缓存 API/接口(interface)以用作模型

php - 如果不存在则插入到表中并返回结果