順調にWordpressのRESTで遊んでいたのですが、
突然、認証が通らなくなりRESTでの記事が投稿できなくなりました。
何度やっても401のBad Requestが返ってきます。
全く同じユーザー名にパスワード、全く同じプログラムなのに
Sorry, you are not allowed to create posts as this user
と、突然知らない人扱い。かなりトラウマを植え付けられました。
原因を説明した後に、どうやって解消したかについてご説明します。
原因
原因は.htaccessにありました。
Bitnamiで作成したWordpressはデフォルトでは、.htaccessファイルがありません。
ls -la /opt/bitnami/apps/wordpress/htdocs/
とりあえず、あなたが今ドハマりしているのであれば確認してみてください。
.htaccessは存在しますか?そいつはやべーやつです。
これがある人は、おそらくこちらを変更しています。
sudo vi /opt/bitnami/apps/wordpress/conf/httpd-app.conf
Allow Override ALLになってると思います。
これBitnamiで作ったWordpressであればデフォルトNoneです。
僕も、Wordpressのログイン画面の場所を変更するためにここを弄っていました。
どうすれば良かったかというと、Allow OverrideはNoneのままで
以下のファイルを編集するのが正解でした。
sudo vi /opt/bitnami/apps/wordpress/conf/htaccess.conf
何故、突然動かなくなったか
理由は、.htaccessがあるタイミングで生成されたからです。
そのタイミングはパーマリンク設定の「変更を保存」ボタンを押したタイミングです。
パーマリンクを変更したかどうかは関係ありません。
- .htaccessが存在しない状態で認証がうまく行った
- しばらく運用
- パーマリンクの設定変更ボタンを押して.htaccessが突如現れた
- RewriteRuleが上書きされて折角Authorizationヘッダを有効にしたのに無効にされた
たぶんRESTの設定でこんなのを書いていると思います。
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
こいつが無効にされてApacheがAuthorizationを受け取らなくなってしまっています。
対処方法
httpd-app.confでAllow Override をNoneにします。
sudo vi /opt/bitnami/apps/wordpress/conf/httpd-app.conf
.htaccessに記載していた内容をhtaccess.confに移動します。
sudo vi /opt/bitnami/apps/wordpress/conf/htaccess.conf
Apacheをリスタートします。
sudo /opt/bitnami/ctlscript.sh restart apache
たぶん動くと思います。
結局振り返ってみれば、
RESTのJSON BASIC認証でやるべきことは
- プラグインを入れること
- Authorizationヘッダを有効にすること
の2点だけでした。
まとめ
勉強不足でした。反省。
しかし、そもそも何故ApacheはAuthorizationを取り除いてしまうのでしょうか。
よくわからん仕様です。
おわり
コメントを残す