通过.htaccess拒绝/rest/*及/index.php/rest/*路径请求的方法
在.htaccess中拦截/rest/*与/index.php/rest/*请求
你可以在WordPress默认的.htaccess规则之前添加以下Rewrite规则,这样能在请求到达WordPress核心前就直接拦截,避免生成404页面的资源消耗:
# 拦截/rest/开头或/index.php/rest/开头的请求 RewriteEngine On RewriteRule ^(index\.php/)?rest/ - [R=400,L]
规则说明:
^(index\.php/)?rest/:精准匹配两种路径格式——直接以/rest/开头,或者以/index.php/rest/开头的请求R=400:返回和你原PHP代码一致的400 Bad Request状态码L:标记为最后一条规则,匹配成功后不再执行后续规则,直接返回响应
对比原PHP逻辑:
你之前在functions.php中使用的拦截代码:
if(substr($_SERVER['REQUEST_URI'],0,6) == '/rest/' || substr($_SERVER['REQUEST_URI'],0,16) == '/index.php/rest/'){ header( 'HTTP/1.1 400 BAD REQUEST' ); exit("Invalid Request"); }
上述.htaccess规则完全等价于这段PHP的拦截逻辑,但执行时机更早,无需加载WordPress核心就能完成拦截,能大幅降低服务器资源占用。
注意:务必将这段规则放在WordPress自带的# BEGIN WordPress注释块之前,否则会被WordPress的默认规则覆盖,无法生效。
内容的提问来源于stack exchange,提问作者David Williams
相关产品推荐
相关产品推荐

