配置.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
相关产品推荐
相关产品推荐

