CakePHP:高级“搜索引擎优化”路由 - 如何保存旧网址路由更改的帖子,用于301重定向的外部链接

时间:2011-08-15 12:50:28

标签: url cakephp routing seo url-routing

我对新项目的路由存在问题。

对于大多数操作和实体(如用户),URL永远不会更改,因为用户名是唯一且不可更改的。对于那些东西,我们可以轻松使用这些路线:

Router::connect('/a/:username/topic/:id', array('controller' => 'users', 'action' => 'view'),array('pass' => array('username','id'),'username' => '[^-]+','id' => '[0-9]+'));
Router::connect('/a/:username', array('controller' => 'users', 'action' => 'view'),array('pass' => array('username'),'username' => '[^-]+'));

但对于帖子(以及其他一些实体),由于拼写错误或其他原因,标题可能/将会发生变化。 想象一下,你将帖子(或其他)的标题改为5次。每次构建一些外部链接。因此,我们希望确保每个外部链接仍然有效,并重定向到当前的URL-Key,并使用301状态更正标题。

因此,我们尝试使用以下字段为路由实现表:

id, source, ref_id, target_controller, target_action, target_param, parent_id

每次调用routes.php时,foreach循环都会在表上运行并连接每个没有父节点的路由。没有父级意味着该记录是特定实体的当前(最新)URL密钥。

如果请求进入“旧”网址密钥,我们会自动重定向到具有301的父级(最新密钥)。

这确实很有效但是......:

稍后当这个表包含数千条记录时,应用程序将读取所有这些记录(除非缓存是最新的)并且将“router :: connect”成千上万的路由而不是5-10条非常通用的路由以上。每当我们的“路线缓存”过时时(很可能经常发生)。

我问自己,是否没有其他解决方案可以让所有旧路线保持运行而不会有很多表现。

我很乐意收到任何反馈。 非常感谢!

1 个答案:

答案 0 :(得分:0)

不是在运行时生成数千条路由并缓存它们,您是否考虑过using a custom Route class只能解决当前请求的路由?

  

现在在过去的slug路线有点棘手,因为确保你有一个有效的slug要么必须在控制器/模型级别完成,要么你必须连接数百条路线,每条路线一个。这两种实现都有很多不足之处。 ...