在使用Apache的WordPress上仅显示前缀为/wp-json的路由

时间:2021-07-15 作者:brad

非常简单:

我只想公开带有/wp-json前缀的路由,这样我就可以使用headless-WordPress,而不用将我的WordPress站点的其余部分公开给internet。

我正在Apache上运行这个,但还没有找到的正确语法。htaccess。

到目前为止,我已经尝试:

<Directory />
    AllowOverride None
</Directory>
<Directory /wp-json*>
    AllowOverride All
</Directory>
<Directory /wp-json*/*>
    AllowOverride None
</Directory>
以及

<Directory "/wp-json/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from all
</Directory>
我的。htaccess位于public_html 根目录。我不确定我是否有。htaccess在错误的目录中,或者如果我使用的语法不起作用。有什么建议吗?

EDIT:怀特先生的例子奏效了。我最终added another rewrite rule 对于/wp管理员和我的期末考试.htaccess 如下所示(注意[F] a的更改[C] 在wp json重写规则上):

RewriteEngine on

# Reject any user requests that are not prefixed "/wp-json"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule !wp-json($|/) - [C]
RewriteRule !wp-admin($|/) - [F]

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

请在根目录的顶部尝试以下mod\\u rewrite指令.htaccess 文件(在# BEGIN WordPress 第节):

# Reject any user requests that are not prefixed "/wp-json"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule !wp-json($|/) - [F]
未加前缀的请求URL/wp-json (或/wp-json/) 被拒绝,403禁止。

这个RewriteCond 检查REDIRECT_STATUS 环境变量是为了确保仅阻止来自客户端的请求,而不是在内部将请求重写到index.php (WordPress前控制器)。REDIRECT_STATUS 在初始请求时为空,并设置为;200英寸;第一次成功重写后(如200 OK状态)。

<Directory />
    AllowOverride None
</Directory>
<Directory /wp-json*>
    AllowOverride All
</Directory>
<Directory /wp-json*/*>
    AllowOverride None
</Directory>
<Directory>AllowOverride 是仅限服务器的指令,如果在中使用,将触发500内部服务器错误.htaccess. 然而AllowOverride 启用/禁用.htaccess 覆盖(它不阻止访问)-这不是您想要在这里执行的操作(.htaccess 覆盖可能已启用)。和/wp-json 不是物理的“;“目录”;在文件系统上<Directory> 指令在此不适用。

Order deny,allow
Deny from all
Allow from all
拥有Deny from allAllow from all 在同样的背景下,这真的没有意义。(您需要禁用对根的访问,并启用对特定URL路径前缀的访问。)然而Order, DenyAllow 是Apache 2.2指令,您更可能位于Apache 2.4服务器上。这些指令现在被弃用,取而代之的是Apache 2.4Require 指令组。

相关推荐

用于阻止带有额外条件的僵尸程序的.htaccess规则

我安装了WP multisite。我与Ezoic和Cloudflare集成。我实施了防火墙规则。但是,我在阻止具有X-Middleton 在User-Agent, 因为我的原始服务器允许它,用于检测真正的用户IP。这个X-Middleton 当机器人通过充当反向代理的Ezoic时,会附加。我在.htaccess 但它不起作用,因为源服务器允许所有X-Middleton.规则如下:# BLOCK BOTS RewriteEngine On RewriteCond %{HTTP_USER_AG