Wordpress REST API无头模式下的伪静态

Wordpress开启无头模式下的伪静态安全设定

huo0 avatar
  • huo0
  • 1 min read
Wordpress REST API无头模式下的伪静态

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 吃掉


评论

Disqus comment here

为你推荐

网站挂载CloudFlare后获取用户真实IP的Nginx.conf配置

网站挂载CloudFlare后获取用户真实IP的Nginx.conf配置

基于nginx的一件配置