php - 如何在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”(保留数字),以便重定向到该路线?
我已经搜索了有关它的信息,但没有解决方案能满足我的需求。
提前致谢
解决方案
在网络服务器之外执行此类操作的最有效方法是连接到 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
我的一个测试站点的目录中来测试这段代码,如果您不希望任何用户能够关闭它或者如果有人更改主题而导致它中断,我建议您采用这种方法。
推荐阅读
- sql - Postgresql唯一约束无效
- deep-learning - 如何在 PyTorch 中聚合梯度?
- c - 将链接列表(包含动态字符串)保存(和读取)到 C 中的二进制文件中
- jenkins - 增加 Kubernetes Jenkins slave 的磁盘空间
- python - 我们可以使用 python 的类型提示来支持二进制运算符中的类型不匹配检测吗?
- javascript - “只读”类型上不存在属性“路由器”
> - angular - 如何在更新到 Angular 10 时安装 @ng-select?
- knockout.js - knockoutJs 两种方式绑定在 foreach 中不起作用
- .net-core - 如何在 Windows 10 上获取“LocalLow”的路径?
- realex-payments-api - 卡支付错误 508 -Realex 支付错误号:61,754