Wordpress REST API无头模式下的伪静态
Wordpress开启无头模式下的伪静态安全设定
- huo0
- 1 min read
PromPub.com 用的vite+WP API架构。
主要我比较习惯WP了,老年人嘛。
完全当作API使用,省的自己每套saas都要开发
为了保证安全,需要改为无头模式。
至于说有插件能实现,我信,就是全tm广告现在
WP的插件市场不买Pro就不用去看,还不如自己CC手搓
我省事,和gpt聊了半天,弄了个下面伪静态。
用不到后台的时候直接给# 1的后台地址两行也注释。
安全省事~主要现在全是扫wp的AI渗透机器人
# —— 防止 403 页面自身被重写导致循环 ——
if ($request_uri = /403.html) { break; }
# allow 标记:0=拒绝,1=放行直通,2=REST 需要重写
set $allow 0;
# 1) 放行后台与登录(考虑到可能带 ?query)
if ($request_uri ~* ^/wp-admin(/|$)) { set $allow 1; }
if ($request_uri ~* ^/wp-login\.php(?:$|\?)) { set $allow 1; }
# 2) 放行 wp-includes(编辑器/后台静态依赖)
if ($request_uri ~* ^/wp-includes/) { set $allow 1; }
# 3) 放行所有静态资源(带版本 query 也放行)
if ($request_uri ~* \.(css|js|jpg|jpeg|png|gif|svg|ico|webp|woff2?|ttf|eot|mp4|webm|ogg)(?:$|\?)) { set $allow 1; }
# 4) 标记 REST,再做正确的 rest_route 重写
if ($request_uri ~* ^/wp-json(/|$)) { set $allow 2; }
if ($allow = 2) {
rewrite ^/wp-json/?(.*)$ /index.php?rest_route=/$1 last;
}
# 5) 其余一律去 403.html
if ($allow = 0) {
rewrite ^ /403.html last;
}
# ⚠️ 不要再写 “/wp-admin -> index.php” 的重写!
# Nginx 本身会用 index 指令处理目录默认页,避免你的一锅端重写把 post.php / admin-ajax.php 吃掉