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

如何移除WordPress REST API端点的wp-json前缀或实现请求重定向?

解决方案:无需修改程序URL或rest_url_prefix的WordPress API路径处理

有两种可行方案,完全满足你的需求——不用修改程序硬编码的URL,也不需要通过rest_url_prefix修改API前缀:

方案1:服务器层面重写(推荐,性能更优)

Nginx配置

在你的Nginx站点配置文件中,添加以下规则,匹配/api/log的POST请求并转发到目标路径:

location /api/log {
    if ($request_method = POST) {
        rewrite ^/api/log(.*)$ /wp-json/api/log$1 last;
    }
}

修改后重启Nginx即可生效。

Apache配置(通过.htaccess)

在WordPress根目录的.htaccess文件中,在默认的WordPress重写规则之前添加以下规则:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^api/log(.*)$ /wp-json/api/log$1 [L]

确保.htaccess有足够权限,且Apache已启用mod_rewrite模块。

方案2:WordPress内部钩子处理

通过template_redirect钩子拦截请求,手动模拟目标API路径的处理流程:
在主题的functions.php文件中添加以下代码:

add_action('template_redirect', function() {
    // 匹配目标请求路径和POST方法
    if ($_SERVER['REQUEST_URI'] === '/api/log' && $_SERVER['REQUEST_METHOD'] === 'POST') {
        // 重置请求路径为实际API端点路径
        $_SERVER['REQUEST_URI'] = '/wp-json/api/log';
        
        // 加载REST API核心文件并初始化
        require_once ABSPATH . 'wp-includes/rest-api.php';
        do_action('rest_api_init');
        
        // 处理请求并输出响应
        $server = rest_get_server();
        $response = $server->dispatch_request();
        $server->send_headers($response);
        echo $response->get_data();
        exit;
    }
});

这段代码会拦截到/api/log的POST请求,无缝转用/wp-json/api/log的处理逻辑,无需修改任何外部程序配置。

内容的提问来源于stack exchange,提问作者radek123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:19:57