【发布时间】:2015-01-22 05:22:25
【问题描述】:
我正在 ModX 中重建一个网站,我想自动将旧 URL 重定向到新的 ModX 页面。
旧网址的格式为http://www.oldsite.com/?pg=2
每个页面都是这样的,所以我需要手动将旧页面 ID 映射到新的 ModX 资源 ID。例如,pg=2 是联系页面,现在资源 ID 为 11,所以我最终会得到一个类似 [2=>11, 3=>15, etc] 的地图
如果我在 docroot 中调整主 index.php,这正是我想要的:
/* execute the request handler */
if (!MODX_API_MODE) {
if (isset($_GET["pg"])) {
if ($_GET["pg"] == 2) {
$url = $url = $modx->makeUrl(11);
$modx->sendRedirect($url);
}
else {
// Page is set, but we don't have a redirect for it.
$modx->handleRequest();
}
}
else {
$modx->handleRequest();
}
}
但是,我对直接破解 index.php 并不满意。我有点缺乏 ModX 经验,无法确切知道将这段代码放在哪里。我试过了:
- 一个 sn-p,然后我在任何 HTML 之前从我的 HTML 标头调用它,但重定向停止工作
- 额外的重定向器,但这不适用于 QUERY_STRING,我不认为
感谢任何见解,打包此代码的最佳位置,或指向我应该使用的 Extra 的指针。
根据 Sean 下面的见解,对我有用的解决方案是一个插件。插件代码如下。对于像我这样的其他插件新手,请确保您访问“系统事件”选项卡,为您尝试访问的事件启用插件。
<?php
if ($modx->event->name == 'OnWebPageInit') {
// Look to see if the GET params include a pg. If they do, we have a request
// for one of the old pages.
if (isset($_GET["pg"])) {
// Map the old pg IDs to the new resource IDs.
if ($_GET["pg"] == 2) {
$url = $modx->makeUrl(11);
}
// Add more here...
// When done trying to match, redirect.
// But only do the redirect if we found a URL.
if (isset($url)) {
$modx->sendRedirect($url, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
exit;
}
}
}
【问题讨论】:
标签: modx modx-revolution