【问题标题】:Disable WordPress routes except for the JSON API and admin UI禁用除 JSON API 和管理 UI 之外的 WordPress 路由
【发布时间】:2022-12-01 04:13:53
【问题描述】:

我打算将我的 WordPress 安装用作无头,并且仅通过前端的 WP API (https://developer.wordpress.org/rest-api/reference/) 使用数据。

但默认情况下,面向客户的网站的用户界面对所有用户都是可见的,我想确保如果客户打开网站,它会被重定向到我的前端。

为了清楚起见,这里有一些例子:

  • 打开:wordpress-example.com -> 重定向到 my-api-example.com
  • 打开:wordpress-example.com/any-route -> 重定向到 my-api-example.com 等等
  • 打开:wordpress-example.com/wp-json/wp/v2/posts -> 返回 API 回复
  • 打开:wordpress-example.com/wp-json/wp/v2/categories -> 返回 API 响应等
  • 打开:wordpress-example.com/wp-admin.php -> 打开 WP Admin

解决方案 1: 也许 WordPress 中有全局设置或禁用 UI 的单独插件。 我找不到。

方案二:调整.thaccess文件排除/wp-admin.php/wp-json/路由 https://fedingo.com/how-to-exclude-folder-from-rewrite-rule-in-htaccess/

【问题讨论】:

  • 您是否考虑过只使用代理?
  • @BretWeinraub 你能提出一个解决方案,我可以在我的 WP 网站上添加它,而无需额外的代理应用程序吗?

标签: wordpress .htaccess wordpress-rest-api


【解决方案1】:

在您的header.php 文件的开头放置一个重定向

$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );
$url_parsed = wp_parse_url($current_uri);
$new_url = 'https://my-api-example.com' . $url_parsed['path'];
wp_safe_redirect($new_url);
exit;

【讨论】:

  • 在我的例子中只是添加header('Location: '.$newURL); 工作,但感谢建议使用 header.php
  • 该函数还将 url 参数添加到新的 url。很高兴它成功了。
【解决方案2】:

方案二:调整.thaccess文件排除/wp-admin.php和/wp-json/路由

在根 .htaccess 文件的顶部,现有的 WordPress 指令:

RewriteCond %{HTTP_HOST} ^wordpress-example.com [NC]
RewriteRule !^(wp-admin.php$|wp-json/) https://my-api-example.com/ [R=302,L]

这假设 wordpress-example.commy-api-example.com 都解析到同一个地方。如果没有,那么您可以删除前面的(健康)状况RewriteCond 指令)检查请求的 Host 标头。

否定的正则表达式 !^(wp-admin.php$|wp-json/) 匹配所有 URL 路径,除了 /wp-admin.php 和任何开始/wp-json/。请注意,RewriteRule 匹配的 URL 路径图案本身不以斜杠开头。

请注意,根据您的示例,这会将所有请求(除了规定的例外情况)重定向到位于my-api-example.com 的文档根目录。如果要保留请求的 URL 路径,请更改替代字符串(RewriteRule 指令的第二个参数)像这样:

RewriteRule !^(wp-admin.php$|wp-json/) https://my-api-example.com%{REQUEST_URI} [R=302,L]

请注意,这是一个 302(临时)重定向。如果这是永久性的,则更改为 301,但前提是您确认这按预期工作。 301 由浏览器持久缓存,因此会使测试出现问题。

但是,我怀疑您需要为“管理”页面设置更多例外情况才能访问。所有的静态资源(图片、CSS、JS 等)呢?我不会排除任何仅映射到物理文件的请求,因为这不一定会重定向可能应该重定向的请求。

【讨论】:

    猜你喜欢
    • 2017-04-08
    • 2016-10-15
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    相关资源
    最近更新 更多