WordPress Rest APIで401エラーが出て認証できない時の原因と対処法

1706354740

 

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