WordPress版微信小程序開發(fā)系列(一):WordPress REST API
自動(dòng)我發(fā)布開源程序WordPress版微信小程序以來(lái),很多WordPress站長(zhǎng)在搭建微信小程序的過(guò)程中會(huì)碰到各種問題來(lái)咨詢我,有些問題其實(shí)很簡(jiǎn)單,只要仔細(xì)看看我寫的文章,就可以自己解決。不過(guò)這些文章里無(wú)法涵蓋所有的技術(shù)點(diǎn),因?yàn)樯婕癢ordpress和微信小程序兩套程序系統(tǒng),有些技術(shù)點(diǎn)對(duì)于小白用戶來(lái)說(shuō)確實(shí)有些難度,因此我考慮寫一個(gè)系列文章介紹WordPress版微信小程序開發(fā)的相關(guān)技術(shù)要點(diǎn)。
今天介紹第一個(gè)技術(shù)要點(diǎn):WordPress REST API。WordPress REST API無(wú)法訪問是被問到的最多的問題。這個(gè)技術(shù)點(diǎn)在《利用WordPress REST API 開發(fā)微信小程序從入門到放棄》就初步介紹過(guò),更為詳細(xì)使用方法將在后續(xù)文章介紹,這里重點(diǎn)關(guān)注,如何才可以讓W(xué)ordPress REST API正常訪問。
最常見的問題就是訪問WordPress ?REST API 的鏈接的時(shí)候顯示404錯(cuò)誤無(wú)法找到該頁(yè)。?REST API是WordPress4.4版本開始提供的功能,不過(guò)是以插件的方式提供的,WordPress ?4.7版本后才內(nèi)置到系統(tǒng)里,如果你的WordPress站是4.7以前的版本,需要下載api插件:https://wordpress.org/plugins/rest-api/。
如果是WordPress 4.7 或更高版本,要想正常訪問 api,需要調(diào)整滿足兩個(gè)條件:
1.設(shè)置WordPress 的固定鏈接(permalink).
2、URL重寫(url rewrite),也就是設(shè)置WordPress的偽靜態(tài)。
一、設(shè)置WordPress 的固定鏈接(permalink)打開Wordpress后臺(tái)設(shè)置,如下圖所示:
選擇除了“樸素”以外的其他選項(xiàng)都可以。不過(guò)注意一點(diǎn):最好在固定鏈接的最后加上html的為后綴,雖然不加并不影響json api的使用,但考慮到小程序里的站內(nèi)鏈接目前是通過(guò)判斷html的后綴來(lái)獲取文章slug值,如果不加html后綴會(huì)導(dǎo)致小程序的站內(nèi)鏈接無(wú)法跳轉(zhuǎn),后續(xù)我會(huì)考慮完善兼容不帶html后綴的固定鏈接的方式。
一、URL重寫設(shè)置完固定鏈接后,就可以可以通過(guò)以下的鏈接方式來(lái)訪問REST API 了,比如查看文章列表的json:
https://www.watch-life.net/index.php/wp-json/wp/v2/posts
但是這種方式看上去并不是那么優(yōu)雅,中間還夾雜這index.php,如果去掉就是就感覺完美一些,這就需要通過(guò)URL 重寫來(lái)實(shí)現(xiàn),具體重寫的原理就不詳細(xì)闡述了,下面給出在不同的web服務(wù)器下URL重寫代碼。
1.IIS 7服務(wù)器
需要安裝URL Rewrite Module。在web.config 文件 加入 URL重寫代碼:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress Rule" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
2.Apache服務(wù)器
在WordPress網(wǎng)站根目錄下增加.htaccess文件,加入 URL重寫代碼:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
3.nginx服務(wù)器
增加一個(gè)conf文件比如wordpress.conf,加入 URL重寫代碼:
location / {
try_files $uri $uri/ /index.php?$args;
}
經(jīng)過(guò)URL重寫后,REST API訪問的鏈接的地址就變成這樣了:
https://www.watch-life.net/wp-json/wp/v2/posts。是不是要優(yōu)雅很多。
特別注意:
1.如果WordPress網(wǎng)站安裝了水煮魚的WPJAM Basic插件,在該插件的設(shè)置項(xiàng)里有個(gè)選項(xiàng):
如果你的博客沒有客戶端,建議屏蔽 REST API 功能。
不要勾選這個(gè)選項(xiàng),如果勾選了,json將無(wú)法訪問。
如果你通過(guò)其他的方式屏蔽了json的訪問,也要取消。
2.如果你擔(dān)心開放Wordpress的json訪問可能對(duì)網(wǎng)站的安全帶來(lái)影響??梢詤⒖糐eff的一個(gè)解決方法,考慮到微信小程序是通過(guò)手機(jī)訪問的,那么就只允許手機(jī)來(lái)訪問這個(gè)api,做一定范圍的防范,如果你是nginx服務(wù)器,可以在config文件里加如下代碼:
location /wp-json {
if ($http_user_agent !~ '(iPhone|Android)'){
return 403;
}
try_files $uri $uri/ /index.php?$args;
}
不過(guò)這方法只是權(quán)宜之計(jì),只要開放一個(gè)功能必然會(huì)打來(lái)隱患,有得必有失,看你的選擇了。
?
?
?
本文摘自 :https://blog.51cto.com/u