基于查询字符串的 ModX 重定向(革命 2.3)
ModX redirect based on query string (Revolution 2.3)
我正在用 ModX 重建一个网站,我想自动将旧的 URL 重定向到新的 ModX 页面。
一个旧的 URL 的形式是 http://www.oldsite.com/?pg=2
每个页面都是这样,所以我需要手动将旧页面ID映射到新的ModX资源ID。例如,pg=2 是联系页面,现在资源 ID 为 11,所以我最终会得到一个类似 [2=>11、3=>15 等]
的映射
如果我在文档根目录中调整主要 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 经验,无法确切知道将这段代码放在哪里。我试过了:
- 一个片段,然后我在任何 HTML 之前从我的 HTML header 调用了它,但是重定向停止工作了
- 额外的重定向器,但这在 QUERY_STRING 上不起作用,我不认为
对于打包此代码的最佳位置,或指向我应该使用的 Extra 的指针,我们将不胜感激。
根据下面 Sean 的见解,对我有用的解决方案是一个插件。插件代码如下。对于像我这样的其他插件新手,请确保访问 "System Events" 选项卡,为您尝试访问的事件启用插件。
<?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;
}
}
}
我更喜欢在带有重定向或 url 重写的 .htaccess 文件中执行此操作 - 这样您就可以发送重定向和响应代码 ~before~ modx 必须处理任何东西 [节省一点开销]
如果您仍想在 modx 中执行此操作,请查看 sendRedirect docs 并发送正确的响应代码 [以便 google 获得页面已实际移动的提示] 注意: $responseCode 选项已弃用,现在您应该在选项数组中使用它:
$modx->sendRedirect('http://modx.com',array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
我同意不破解 index.php 文件,只会让你伤心。您要做的是将重定向代码放在 plugin. Check the Modx API docs for the appropriate event for it to fire on - perhaps: OnWebPageInit 中即可。抱歉,我不知道具体哪个好。
然而~重要提示!
并非所有事件实际上都是活动的,它们可能会出现在 modx 管理器中,但实际上不会执行任何操作,您只需要测试或挖掘代码即可找到答案。 [或在社区中提问] 再次抱歉,我不确定哪些有效,哪些无效。
我正在用 ModX 重建一个网站,我想自动将旧的 URL 重定向到新的 ModX 页面。
一个旧的 URL 的形式是 http://www.oldsite.com/?pg=2
每个页面都是这样,所以我需要手动将旧页面ID映射到新的ModX资源ID。例如,pg=2 是联系页面,现在资源 ID 为 11,所以我最终会得到一个类似 [2=>11、3=>15 等]
的映射如果我在文档根目录中调整主要 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 经验,无法确切知道将这段代码放在哪里。我试过了:
- 一个片段,然后我在任何 HTML 之前从我的 HTML header 调用了它,但是重定向停止工作了
- 额外的重定向器,但这在 QUERY_STRING 上不起作用,我不认为
对于打包此代码的最佳位置,或指向我应该使用的 Extra 的指针,我们将不胜感激。
根据下面 Sean 的见解,对我有用的解决方案是一个插件。插件代码如下。对于像我这样的其他插件新手,请确保访问 "System Events" 选项卡,为您尝试访问的事件启用插件。
<?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;
}
}
}
我更喜欢在带有重定向或 url 重写的 .htaccess 文件中执行此操作 - 这样您就可以发送重定向和响应代码 ~before~ modx 必须处理任何东西 [节省一点开销]
如果您仍想在 modx 中执行此操作,请查看 sendRedirect docs 并发送正确的响应代码 [以便 google 获得页面已实际移动的提示] 注意: $responseCode 选项已弃用,现在您应该在选项数组中使用它:
$modx->sendRedirect('http://modx.com',array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
我同意不破解 index.php 文件,只会让你伤心。您要做的是将重定向代码放在 plugin. Check the Modx API docs for the appropriate event for it to fire on - perhaps: OnWebPageInit 中即可。抱歉,我不知道具体哪个好。
然而~重要提示!
并非所有事件实际上都是活动的,它们可能会出现在 modx 管理器中,但实际上不会执行任何操作,您只需要测试或挖掘代码即可找到答案。 [或在社区中提问] 再次抱歉,我不确定哪些有效,哪些无效。