记录一下开发wordpress插件过程中遇到的问题。
问题描述:wordpress前后端通过restapi进行交互,api注册后前端访问出现404错误
1. Wordpress plugin API 注册
add_action( 'rest_api_init', 'regsiter_api', 10 );
function regsiter_api()
{
register_rest_route( 'plugin-slug/v1', '/options', array(
'methods' => 'POST',
'callback' => 'get_options',
) );
}
function get_options() {
return 'hello world';
}
2. 用curl访问
curl --location --request POST 'http://localhost/wp-json/plugin-slug/v1/options'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 196 100 196 0 0 24669 0 --:--:-- --:--:-- --:--:-- 39200<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>
3. 问题原因, web服务器为自己搭建,未开启rewrite功能导致
4. 解决方案,开启rewrite功能,将 #LoadModule rewrite_module modules/mod_rewrite.so 注释去掉,重启apache
#LoadModule remoteip_module modules/mod_remoteip.so
#LoadModule request_module modules/mod_request.so
#LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule sed_module modules/mod_sed.so
#LoadModule session_module modules/mod_session.so
#LoadModule session_cookie_module modules/mod_session_cookie.so
#LoadModule session_crypto_module modules/mod_session_crypto.so
5. 验证,重新用curl访问,返回hello world
$ curl --location --request POST 'http://localhost/wp-json/plugin-slug/v1/options'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 13 100 13 0 0 20 0 --:--:-- --:--:-- --:--:-- 20"hello world"