【问题标题】:Most efficient way to rewrite URL重写 URL 的最有效方法
【发布时间】:2013-05-31 10:07:47
【问题描述】:

我正在使用 Zend 框架开发一个项目

用户将能够在网站上发布公告。

现在您可以使用格式如下的 URL 咨询他们(对于 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 的解决方案对于那种想要的行为似乎不太灵活......

对于信息,公告量很可能会超过10000,因此效率问题相当大。

【问题讨论】:

  • 你可以将任何你想要的东西作为路径信息添加到 URL 中,所以/announcement/view/id/60/city/zip/type/street-id。只需将您的系统设置为忽略任何“不相关”的内容。
  • 这使 SEO 友好的网址是一个骗局,我敢打赌你有更好的事情要做。
  • 你听说过Zend_Controller_Router_Route_Regex吗?

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


【解决方案1】:

最好的解决办法是使用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 调整为您的需要。

【讨论】:

  • 非常感谢您的回答。我认为解决方案是如此简单,以至于我蒙蔽了双眼。此外,正确的正则表达式是“announcement/(.*?)/(.*?)/(.*?)/(.*?)\-([0-9]*)”,以防有人想知道为什么它不是那样工作的。
【解决方案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");

【讨论】:

    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2011-06-06
    相关资源
    最近更新 更多