WordPress Rest APIで401エラーが出て認証できない時の原因と対処法
WordPress Rest APIの認証で、Failed to complete: 401 Unauthorized が返ってきてしまう場合、主に3パターンの原因がありますが、サーバーのPHPの設定や、設置しているWordpress側の.htaccessを編集することで回避できます。
PHPはモジュール版で
サーバーのPHPが、CGI版の場合、そもそもAuthorization headerが受け取れないようです。
Wordpressの設置してあるサーバーのPHPはモジュール版で稼働する事が大前提になります。
その上で、それでも401 Unauthorized が返ってきてしまう場合は、以下の原因が考えられます。
認証用環境変数が不足している場合
.htaccessのWordPressのリライトルールに以下を追加する。
RewriteRule .* – [E=REMOTE_USER:%{HTTP:Authorization}]
WordPressデフォルトの.htaccess記述と合わせると以下になる。
# BEGIN WordPress
RewriteEngine 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ヘッダーが取得できない場合
Xサーバー、シンサーバーなどは、Authorizationヘッダーがデフォルトでは取得する事が出来ないので、.htaccessに以下を追加することで正常にAuthorizationヘッダーが取得出来るようになります。
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
WordPressデフォルトの.htaccess記述と合わせると以下になる。
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
大抵の場合がこの3パターンで解決できるので試してみてください。
それでも解決できない場合
それでも解決できない場合、サーバー側で国外IPアドレスを排除している場合があります。
国内IPアドレスからのアクセスであっても、システム上で国外IPアドレスからのアクセスとして誤認されることがあるので、設定を無効にしてみてください。
Xサーバーシンサーバーの場合は、「ダッシュボード アクセス制限」と「REST API アクセス制限」を無効にする必要があります。
Wordpressセキュリティ設定から設定変更が行えます。
https://www.shin-server.jp/support/manual/man_server_wpsecurity.php
