url - CakePHP:高级 'SEO' 路由 - 如何保存旧 URL 更改帖子的路由,用于外部链接的 301 重定向

标签 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 次。每次建立一些外部链接。因此,我们要确保每个外部链接仍然有效,并重定向到具有正确/更改的标题和 301 状态的当前 URL-Key。

因此,我们尝试为具有以下字段的路由实现一个表:

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

每次调用 routes.php 时,一个 foreach 循环将在表上运行并连接每条没有父路由的路由。没有父项意味着记录是特定实体的当前(最新)url 键。

如果请求转到“旧”url-key,我们会使用 301 自动重定向到父级(最近的 key )。

这确实工作得很好但是......:

稍后,当此表包含数千条记录时,应用程序将读取所有这些记录(除非缓存是最新的)并将“router::connect”数千条路由,而不是像看到的那样的 5-10 条非常通用的路由多于。并且每次我们的“路由缓存”都已过时(这种情况很可能经常发生)。

我问自己是否没有其他解决方案可以在不消耗大量性能的情况下保持所有旧路由运行。

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

最佳答案

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

Now in the past slug routes were a bit tricky as ensuring you had a valid slug either had to be done at the controller/model level, or you had to connect several hundred routes, one for each article slug. Both implementations leave much to be desired. ...

关于url - CakePHP:高级 'SEO' 路由 - 如何保存旧 URL 更改帖子的路由,用于外部链接的 301 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065109/

相关文章:

mysql - 我的 CakePHP HABTM 查询出了什么问题?

Django:如何使用中间件将请求重新路由到不同的 View

routing - Unix 路由表中的 "proto kernel"是什么意思?

mysql - 如何从 cakephp 3 中的两个表中获取数据

php - beforeFilter() 没有被调用?

http - 使用 JMeter 的参数化变量 $URL

javascript - 将 URL 复制到剪贴板并显示和隐藏消息

java - Jetty '{servlet}/{parameter}' url路由

ios - UIImage 的图像 URL 不起作用

java - Webview URL 项目不可见