【问题标题】:ModX redirect based on query string (Revolution 2.3)基于查询字符串的 ModX 重定向(Revolution 2.3)
【发布时间】: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


    【解决方案1】:

    我的偏好是在带有重定向或 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 中。检查 Modx API 文档中的 appropriate event 以使其启动 - 也许:OnWebPageInit 会成功。抱歉,我不知道哪一个会起作用。

    但是~重要提示!

    并非所有事件实际上都处于活动状态,它们可能会显示在 modx 管理器中,但实际上并没有做任何事情,您只需测试或挖掘代码即可找到答案。 [或在社区中询问] 再次,抱歉,我不确定哪些有效,哪些无效。

    【讨论】:

    • 谢谢肖恩。正是我需要的洞察力。我没有意识到插件与 Extras 不同——我认为它们是同一个东西——我认为是 WordPress 术语混乱。阅读并从您描述它的方式来看,这正是我所追求的缺失链接,尽管我很欣赏您关于 .htaccess 作为替代方案的观点。也感谢 301s 的文档提示。
    • 是的,插件可以非常甜美和强大[尤其是当我们要创建自定义事件时!] 但是在故障排除时很容易忽略它们,因为一段代码何时/何地并不总是很明显正在被执行。这也是我建议使用 .htaccess 方法的主要原因。 [让我们知道该事件是否正确并且实际上是活跃的!:)]
    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 2019-05-17
    • 2012-07-21
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    相关资源
    最近更新 更多