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

配置.htaccess拦截WordPress的wp-json请求无效如何解决?

问题原因说明

你当前的规则没有生效,因为返回的404状态码是WordPress核心输出的,并非Apache的mod_rewrite模块触发。wp-json本身不是服务器上真实存在的目录/文件,你写的Rewrite规则没有在请求转发到WordPress入口index.php之前命中,所以请求还是进入了WordPress的REST API处理流程,只是WordPress返回了404状态码但仍然输出了接口数据。

两种解决方案都可以实现需求,具体操作如下:

方案1:通过.htaccess实现拦截

需要保证Apache已经开启mod_rewrite模块,然后在.htaccess文件最顶部、所有WordPress默认伪静态规则之前添加以下配置:

RewriteEngine On
RewriteRule ^wp-json(/.*)?$ - [R=404,L,NC]

配置说明:

  • NC 表示匹配时不区分大小写
  • L 表示命中规则后终止后续所有重写逻辑,不会再走到WordPress的转发规则
  • 生效后返回的是Apache默认的404响应,不会包含任何REST API的JSON数据,也不会出现X-WP系列的响应头
    注意:这个方案会拦截所有wp-json开头的请求,包括WordPress后台编辑功能需要用到的REST API调用,可能导致古腾堡编辑器、自定义izer等后台功能失效。

方案2:通过WordPress原生方式处理(更推荐)

这种方式适配性更强,不会因为服务器配置变更、WordPress更新覆盖.htaccess导致规则失效,还可以灵活控制访问权限。

完全禁用所有REST API

在当前主题的functions.php文件中添加以下代码:

// 禁用REST API功能
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');

仅允许管理员访问REST API(不影响后台功能)

如果需要保留后台的REST API使用需求,只拦截未授权用户的访问,可以用以下代码:

add_action('rest_api_init', function () {
    // 仅拥有后台管理权限的用户可访问REST API
    if (!current_user_can('manage_options')) {
        wp_die('访问被禁止', '403 Forbidden', ['response' => 403]);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:27:05