外部サーバー(VPSなど)からWordPress REST APIを使って自動投稿しようとした際、ユーザー名もアプリケーションパスワードも合っているのに、なぜか 「401 Unauthorized(このユーザーとして投稿を編集する権限がありません)」 と表示されて失敗することがあります。
これはシンレンタルサーバー(やエックスサーバー)の仕様で、セキュリティ上の理由から HTTP認証ヘッダー(Authorization)がPHPに渡されない 設定になっているためです。
この記事では、REST APIを正常に動作させるための .htaccess 編集方法を備忘録として残します。
認証情報は正しいのに「401」で失敗する
PHPなどでcURLを使って投稿しようとすると、以下のようなエラーレスポンスが返ってきます。
{
"code": "rest_cannot_create",
"message": "このユーザーとして投稿を編集する権限がありません。",
"data": { "status": 401 }
}
これは、サーバーが「誰がアクセスしてきたか(認証情報)」を途中で捨ててしまっているのが原因です。
解決策:.htaccess に追記する
WordPressがインストールされているディレクトリにある .htaccess ファイルの先頭付近に、以下の3行を追記します。これにより、捨てられていた認証情報がPHP側へ引き渡されるようになります。
追記するコード
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
実際の .htaccess 構成例
シンレンタルサーバーの標準的な .htaccess に組み込むと、以下のようになります。
# 既存の設定(キャッシュ関連など)
SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode
RewriteEngine on
# --- ここから追記:REST API 認証を有効化 ---
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
# --- ここまで追記 ---
# 既存の常時SSL化設定など
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
注意点:セキュリティプラグインの干渉
もし .htaccess を修正してもエラーが消えない場合は、以下の点も確認が必要です。
-
セキュリティ系プラグイン:
SiteGuard WP PluginやAll In One WP Securityなどが導入されている場合、REST API自体を無効化している可能性があります。 -
IP制限:
.htaccessやサーバーパネルの設定で、特定のIP以外からのアクセスを拒否していないか確認してください。
修正はサーバーパネルから出来る
直接ファイルを編集してFTPで入れ込むことも出来ますが、シンレンタルサーバーでは「.htaccess」ファイルの編集は、管理画面(サーバーパネル)から編集することができます。

投稿後の確認用スクリプト(PHP)
疎通確認に利用した簡易的なPHPコードも載せておきます。
<?php $site_url = "https://your-site.space"; $username = "your_user"; $app_password = "xxxx xxxx xxxx xxxx xxxx xxxx"; // スペースは除去して送る $auth_string = base64_encode($username . ':' . str_replace(' ', '', $app_password)); $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $site_url . '/wp-json/wp/v2/posts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'title' => 'テスト投稿',
'content' => '疎通確認成功',
'status' => 'publish'
]),
CURLOPT_HTTPHEADER => [
'Authorization: Basic ' . $auth_string,
'Content-Type: application/json'
],
]);
$response = curl_exec($ch);
echo $response;
curl_close($ch);
シンレンタルサーバーでREST APIを活用する場合、.htaccessでのヘッダー転送設定は必須です。一度設定してしまえば、VPSからの自動投稿や外部アプリとの連携がスムーズに行えるようになります。


コメント