如果是WordPress 4.7 或更高版本,要想正常访问 api,需要调整满足两个条件:
1.设置WordPress 的固定链接(permalink).
2、URL重写(url rewrite),也就是设置WordPress的伪静态。
一、设置WordPress 的固定链接(permalink)
打开Wordpress后台设置,如下图所示:
选择除了“朴素”以外的其他选项都可以。不过注意一点:最好在固定链接的最后加上html的为后缀,虽然不加并不影响json api的使用,但考虑到小程序里的站内链接目前是通过判断html的后缀来获取文章slug值,如果不加html后缀会导致小程序的站内链接无法跳转,后续我会考虑完善兼容不带html后缀的固定链接的方式。
一、URL重写
设置完固定链接后,就可以可以通过以下的链接方式来访问REST API 了,比如查看文章列表的json:
但是这种方式看上去并不是那么优雅,中间还夹杂这index.php,如果去掉就是就感觉完美一些,这就需要通过URL 重写来实现,具体重写的原理就不详细阐述了,下面给出在不同的web服务器下URL重写代码。
1.IIS 7服务器
2.Apache服务器
在WordPress网站根目录下增加.htaccess文件,加入 URL重写代码:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
3.nginx服务器
增加一个conf文件比如wordpress.conf,加入 URL重写代码:
location / {
try_files $uri $uri/ /index.php?$args;
}
经过URL重写后,REST API访问的链接的地址就变成这样了:
特别注意:
1.如果WordPress网站安装了水煮鱼的WPJAM Basic插件,在该插件的设置项里有个选项:
如果你的博客没有客户端,建议屏蔽 REST API 功能。
不要勾选这个选项,如果勾选了,json将无法访问。
如果你通过其他的方式屏蔽了json的访问,也要取消。
location /wp-json {
return 403;
}
try_files $uri $uri/ /index.php?$args;
}
不过这方法只是权宜之计,只要开放一个功能必然会打来隐患,有得必有失,看你的选择了。