WordPress Rest Apiで401や403エラーが出て認証できない時の対処法
※本ページはプロモーションが含まれていますWordPressのRest Apiで認証すると、サーバによっては401エラーや403エラーが出る場合があります。
.htaccessに認証関連の記述を追加したところ、無事に認証が通りましたので紹介します。
2パターンあるので、最初の方法で通らなかった場合は次のパターンを試してみてください。
認証用環境変数の追加
.htaccessのWordPressのリライトルールに下記を追加。
RewriteRule .* – [E=REMOTE_USER:%{HTTP:Authorization}]
WordPress部分の全体はこのようになる。
# BEGIN WordPressRewriteEngine On RewriteRule .* – [E=REMOTE_USER:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress
ヘッダ情報が削除されてしまうサーバの場合
Authorization ヘッダが取得できないサーバはこちらの方法で解決できます。
XSERVER系は Authorization ヘッダが取得できないようで、僕が使っているシン・レンタルサーバもこの方法で解決できました。
.htaccessのWordPress部分の上に下記項目を追加。
RewriteEngine On RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
全体的にはこんな感じになる。
RewriteEngine On RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # BEGIN WordPressRewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress
403エラーが出る場合
403エラーが出る場合は、そのURLのアクセスが禁止されているというエラー。
海外IPアドレスからのアクセスを遮断しているサーバなどで起きます。
使っているサーバによって設定方法が違うので、IPアドレスなどによるアクセス遮断を外してください。
XSERVER系のレンタルサーバーなら、サーバーパネルを開き「WordPressセキュリティ設定」をクリック。
設定したいドメインの「選択する」をクリック。
「REST APIアクセス制限」を「OFFにする」を選択し、「設定する」をクリック。
これで設定完了です。
おわりに
開発環境や別のレンタルサーバでは普通に認証が通っていたので、原因究明に時間がかかりました。
REST API は一筋縄ではいかないので所々躓いています…。