首页 > 解决方案 > 如何在functions.php中创建301重定向规则

问题描述

首先,对不起,如果我的英语不完美...

由于各种原因(VM 处于不一致的状态并且主要是过时的格式),我正在将一个网站迁移到 Wordpress。

网络上有一个不再工作的新闻频道,但这些频道仍在旧数据库中。我用 Python 编写了一个小脚本,以生成具有 wordpress 使用的导入格式的 XML,从 CSV 和数据库中获取的新闻。

新闻有一个关联的 ID,我从中生成了帖子 ID 和格式为“mywebsite.com/on-1234”(“on”来自“旧新闻”)的 url。在旧网站上,新闻的格式为“mywebsite.com/news.html?id=1234”。这些旧链接和当前链接自大量站点(我们是环境研究中心)。

我知道如何从一个链接重定向到另一个链接,但是在每个新闻中单独执行它可能是一项繁琐的任务,因为有数百个......有没有办法检测模式“/news.html?id=1234”并将其替换为“ on-1234”(保留数字),以便重定向到该路线?

我已经搜索了有关它的信息,但没有解决方案能满足我的需求。

 提前致谢

标签: phpwordpressurlredirect

解决方案


在网络服务器之外执行此类操作的最有效方法是连接到 WordPress 的parse_request钩子并在那里处理重定向。这是一些示例代码,它可以连接到parse_request检查中,以查看请求是否是旧的,如果它是旧的并且有一个 id,如果它与帖子 id 不匹配,news.html它将定向到具有该 id的帖子,您可以稍微调整以获得相同的效果mywebsite.com/?p=1234.

/**
 * Plugin Name: Old News Redirect
 * Plugin URI:
 * Description: Redirect old news urls.
 * Version: 0.0.1
 * Author: ninnypants
 * Author URI:
 * License: GPL2
 */

namespace StackOverflow\OldNews;

function maybe_redirect( $wp ) {
    if ( 'news.html' === $wp->request ) {
        $id = filter_input( INPUT_GET, 'id', FILTER_VALIDATE_INT );
        if ( empty( $id ) ) {
            return;
        }

        wp_safe_redirect( add_query_arg( 'p', $id, home_url() ) );
        exit;
    }
}
add_action( 'parse_request', __NAMESPACE__ . '\maybe_redirect' );

我通过将这段代码放到mu-plugins我的一个测试站点的目录中来测试这段代码,如果您不希望任何用户能够关闭它或者如果有人更改主题而导致它中断,我建议您采用这种方法。


推荐阅读