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

如何在全局拒访的.htaccess中放行WordPress虚拟JSON Feed?

嘿,这个坑我之前踩过!指令根本不管用的原因很简单——它只认服务器上实际存在的文件或目录,而你的JSON Feed是WordPress通过重写规则生成的虚拟端点,压根不是真实文件,所以完全不会触发,自然拦不住也放不了行。

给你两种亲测有效的解决方案,选一个适合你的就行:

方案一:用RewriteRule放行(推荐,和WordPress重写兼容性更好)

这个方法是通过Rewrite规则直接匹配虚拟端点,让Apache跳过后续的验证规则。你可以根据自己的Apache版本选择代码:

如果你用的是Apache 2.4+(现在大多数服务器都是这个版本)

# 先启用重写引擎
RewriteEngine On

# 放行你的JSON Feed虚拟端点(把^feed/json/?$换成你的实际端点路径)
# [L]表示匹配到就停止后续规则处理,[NC]是不区分大小写(可选)
RewriteRule ^feed/json/?$ - [L,NC]

# 对剩下的所有请求启用密码验证
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/your/.htpasswd  # 替换成你实际的.htpasswd文件路径
Require valid-user

# 下面是WordPress默认的重写规则(如果你的.htaccess里已经有了,就不用重复加)
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

如果你还在使用Apache 2.2(比较老的版本)

# 先启用重写引擎
RewriteEngine On

# 放行你的JSON Feed虚拟端点
RewriteRule ^feed/json/?$ - [L,NC]

# 对剩下的所有请求启用密码验证
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/your/.htpasswd
Require valid-user

# 默认拒绝所有未通过验证的访问
Order Deny,Allow
Deny from all
Satisfy Any

# WordPress默认重写规则(已有则跳过)
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

方案二:用指令(适合明确知道端点路径的情况)

return (<Location>是直接匹配URL路径的,不管是不是真实文件,刚好适合虚拟端点。同样分版本:

### Apache 2.4+
```apache
# 先对所有路径启用密码验证
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/your/.htpasswd
Require valid-user

# 单独放行JSON Feed虚拟端点
<Location "/feed/json">  # 替换成你的实际端点路径,带斜杠的话就写"/feed/json/"
    Require all granted
</Location>
)
WordPress默认重写规则(已有则跳过)

RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

### Apache 2.2
```apache
# 先对所有路径启用密码验证
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/your/.htpasswd
Require valid-user

# 单独放行JSON Feed虚拟端点
<Location "/feed/json">
    Order Allow,Deny
    Allow from all
    Satisfy Any  # 让Apache只要满足Allow条件就跳过验证
</Location>

# WordPress默认重写规则(已有则跳过)
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

几个重要的注意点:

  • 一定要把/path/to/your/.htpasswd替换成你服务器上.htpasswd文件的真实路径,比如/home/yourusername/.htpasswd
  • 替换示例中的^feed/json/?$或"/feed/json"为你的JSON Feed的实际URL路径,比如如果你的端点是/wp-json/custom/feed/,就改成对应的内容
  • 测试的时候记得清空浏览器缓存,不然之前的认证缓存会影响测试结果
  • 如果你的.htaccess里已经有WordPress的默认重写规则,别重复添加,把放行/验证规则放在它前面就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:48:45