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