1

我想301重定向来自以前嵌套站点的 URL,因为 Pencilblue 不支持它们,

例如a/b页面/b

为此,我一直在尝试include/http/request_handler.js,但面临一些问题。

调用永远不会进入RequestHandler.prototype.handleRequest甚至RequestHandler.prototype.onSessionRetrieved(似乎这些方法没有从任何地方调用)

因此,我将代码放在 RequestHandler 中,并在确认 req 不是公共资源或 api 后,我创建一个新的 url 并执行

return this.doRedirect(newUrl, 301)

这实际上有效,但同时我收到

发送错误后无法呈现标头

#1075对我没有多大帮助,因为我不确定我应该修改哪个特定的控制器。我需要尽早捕获req,看看它是否是一个页面,然后重定向到页面前缀的url。

提前致谢。

4

1 回答 1

0

有几种方法可以进行重定向。您可以从控制器或从中间件执行它们。你是对的,请求处理程序中的一些函数没有被调用。尽管pencilblue团队没有将它们标记为此类,但它们已被弃用。/include/http/router.js他们用和替换了大量的请求处理程序功能include/http/middleware/index.js。插件可以注册自己的中间件来劫持请求管道。

有关创建自己的中间件的更多信息,请参阅wiki 上的Advanced Routing 。

使用路由框架,您的插件将能够注册能够检查请求然后根据您的特定标准重定向的中间件。可以从 req.router 访问路由器,然后您可以从那里调用 req.router.redirect ( Source )。

参考:#1224

于 2017-08-04T05:19:47.893 回答