You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess正则规则正确实现WordPress链接结构跳转

你之前生成的规则无法实现需求的根本原因是:旧URL结构里只有年份、月份、文章别名三个信息,新结构需要的分类别名、文章ID两个参数不存在于旧URL中,仅靠.htaccess的正则匹配无法拿到这两个缺失的参数,所以不能用简单的RedirectMatch规则直接实现。

以下是两种可落地的解决方案:

方案一:使用WordPress内置逻辑实现自动跳转(推荐,无需手动维护规则)

你可以把下面的代码添加到当前使用主题的functions.php文件末尾,也可以通过代码片段类插件插入,WordPress会自动根据旧链接里的文章别名匹配对应文章,自动拼接成新结构的URL完成301跳转,适配所有存量文章:

add_action('template_redirect', function() {
    // 匹配旧链接规则:/年/月/文章别名.html
    if (preg_match('#^/([0-9]{4})/([0-9]{2})/([^/]+)\.html$#', $_SERVER['REQUEST_URI'], $matches)) {
        $post_name = $matches[3];
        // 根据文章别名查询对应文章
        $target_post = get_page_by_path($post_name, OBJECT, 'post');
        if ($target_post) {
            // 获取文章首个分类的别名
            $post_categories = get_the_category($target_post->ID);
            $category_slug = $post_categories[0]->slug;
            // 生成符合要求的新结构URL
            $new_permalink = home_url("/{$category_slug}/{$target_post->post_name}/{$target_post->ID}/");
            // 执行301永久跳转
            wp_redirect($new_permalink, 301);
            exit;
        }
    }
});

配置完成后清空站点缓存和浏览器缓存即可生效,测试阶段可以先把301改成302避免跳转缓存影响调试,确认没问题后改回301即可。

方案二:.htaccess手动映射(仅适合文章数量较少的站点)

如果你的站点文章总数少于50篇,可以手动整理所有文章的旧别名、对应分类别名、文章ID的映射关系,在.htaccess中逐篇编写跳转规则,示例如下:

<IfModule mod_rewrite.c>
RewriteEngine On
# 单篇文章跳转规则示例:旧别名test-post,分类别名news,文章ID123
RewriteRule ^[0-9]{4}/[0-9]{2}/test-post\.html$ /news/test-post/123/ [L,R=301]
# 其余文章按照上述格式逐个添加规则即可
</IfModule>

该方案无需修改WordPress代码,但每新增文章都需要手动补充规则,维护成本较高,文章量大的站点不推荐使用。

内容的提问来源于stack exchange,提问作者Mo.Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:36:03