写在前面
前面写了一篇文章《在宝塔上使用手动安装wordpress》,在后续开发中出现了一个问题:通过接口的方式调用woocommerce插件接口404并且响应类型为text/html。本篇就围绕如何解决这个问题来做一些说明。
问题描述
在宝塔上面手动搭建完wordpress站点后,一切访问都能正常使用,由于我做的是电商相关的网站,需要用到woocommerce,wordpress站点里面的数据需要调用woocommerce插件接口做同步处理。在调用接口时出现如下错误: 404 not found ,content-type:text/html
通过docker安装和腾讯轻量服务器wordpress模版安装的方式并没有出现这类错误。请求结果如下:
解决过程
发现问题所在——错误日志
打开错误日志/www/wwwlogs/ip_端口.error.log会发现如下错误:
2311571#0: *48824 open() "/www/wwwroot/项目根目录/wp-json/wc/v3/products" failed (2: No such file or directory), client: xx.xx.xx.xx, server: xx.xx.xx.xx_port, request: "GET /wp-json/wc/v3/products?per_page=10&search=CMB02070X1000GB200&oauth_nonce=xx&page=1&oauth_timestamp=1731224726&oauth_signature_method=HMAC-SHA256 HTTP/1.1", host: "xx.xx.xx.xx:port"
根据上面错误,结合上面的接口报错(404 Not Found [Server: nginx……),可以知道:
- 路径问题:Nginx 配置可能没有正确地将
/wp-json/wc/v3/products路由到 WordPress 的处理逻辑。 - Nginx 配置问题:Nginx 配置文件可能没有正确设置重写规则,导致请求直接被当作静态文件处理。
解决方案
解决方案:在项目设置——配置文件 增加如下代码(修改后注意重启nginx,如果是在宝塔上面操作可以不操作重启)。 配置代码如下:
# 处理 WooCommerce API 请求
location ~* /wp-json/ {
try_files $uri $uri/ /index.php?$args; # 尝试按顺序查找文件、目录,最后重定向到 index.php
}