如何移除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
相关产品推荐
相关产品推荐

