我正在ModX中重建网站,我想自动将旧网址重定向到新的ModX页面。
旧网址的格式为http://www.oldsite.com/?pg=2
每个页面都是这样的,所以我需要手动将旧页面ID映射到新的ModX资源ID。例如,pg = 2是联系页面,现在是资源ID 11,因此我最终得到的地图如[2 => 11,3 => 15等]
如果我在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经验,无法确切地知道放置此代码的位置。我试过了:
对于打包此代码的最佳位置,或者指向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;
}
}
}
答案 0 :(得分:1)
我喜欢这样做是在带有重定向或网址重写的.htaccess文件中 - 这样你就可以在~modx处理之前发送重定向和响应代码〜[节省一些开销]
如果您仍想在modx中执行此操作,请查看sendRedirect docs&amp;发送正确的响应代码[所以google得到页面实际移动的提示]注意:$ responseCode选项已弃用,您应该在options数组中使用它:
$modx->sendRedirect('http://modx.com',array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
我同意不攻击index.php文件,只会让你感到悲伤。您要做的是将重定向代码放在plugin中。检查appropriate event的Modx API文档是否可以启动它 - 也许:OnWebPageInit可以解决问题。对不起,我不确切知道哪一个会起作用。
但是〜重要提示!
并非所有事件都是实际活动的,它们可能会出现在modx管理器中,但实际上并没有做任何事情,您只需要测试或挖掘代码即可找到答案。 [或在社区中询问]再次,对不起,我不知道哪些有效,哪些无效。