AWSで構築するWordPress環境としてLightsailって便利な選択肢があります。
Amazon Lightsail の WordPress Multisite
WordPressがBitnami(というWebサービスをパッケージ化して使えるようにするもの)で
提供されていて、導入がめちゃくちゃ楽です。
また、WordPressのMultisiteでは、一つのエンジンでいくつものサイトを作れるので、
ちょこっとWordPressの実験をしたい、テーマのアレコレをいじってみたい、
なんてときに便利だったりします。
が、REST APIをデフォルトで受け付けない仕様らしく、
対処方法もマイナーすぎて泥沼にはまり込んだのでメモを残します。
やりたかったこと
WordPressへ自動投稿をするのにあたり、REST APIをつつきたかった。
つまづいたこと
Pythonで書いたREST APIでの投稿が、別の環境では通るのに、
Lightsailではエラーになった。
エラーってた理由
.htaccess
に下記の表記がないとWordPressが受け付けてくれない。
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
沼ってた理由
BitnamiのWordPressには.htaccess
がファイルとして存在しない。
※同等の機能があるけど、違う形式のファイルになってる
そのファイルが何であるのかと、どう直せばよいのかを把握するのに時間がかかった。
結論から書くと、次のリンク先のページに今回の解決方法の解があります。
この記事は、そのページのリライトに近い内容です(書くと覚えるから)。
WordPress REST APIを使用して記事を投稿する
手順
概要
$ sudo nano /opt/bitnami/apps/wordpress/conf/httpd-app.conf
$ sudo /opt/bitnami/ctlscript.sh restart apache
上記の内容は
- 設定ファイルを開く(それで三行ほど追記)
- apacheを再起動
って流れです。
設定ファイルの修正について
追加したコード
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
追記後のhttpd-app.conf
の全文
<IfDefine USE_PHP_FPM>
<Proxy "unix:/opt/bitnami/php/var/run/wordpress.sock|fcgi://wordpress-fpm" timeout=300>
</Proxy>
</IfDefine>
<Directory "/opt/bitnami/apps/wordpress/htdocs">
Options +MultiViews +FollowSymLinks
AllowOverride None
<IfVersion < 2.3 >
Order allow,deny
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
<IfDefine USE_PHP_FPM>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://wordpress-fpm"
</FilesMatch>
</IfDefine>
# https://www.premium-tsubu-hero.net/worpdpress-restapi-post01/
# for wordpress rest api
# 2023/07/29
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [S=2]
# uploaded files
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
Include "/opt/bitnami/apps/wordpress/conf/banner.conf"
</Directory>
Include "/opt/bitnami/apps/wordpress/conf/htaccess.conf"
解説
httpd-app.conf
はBitnamiが.htaccess
代わりに読み込んでいるファイルです。
今回のエラーは認証系がブロックされてしまっていたのが理由らしいです。
そこで、認証系を通す設定を変え、期待する動きになるようにしたのが今回の修正です。
手法としては、.htaccess
を利用するように
Bitnamiの設定を変えることもできるのですが、
Bitnamiさんの思想として、.htaccess
よりもhttpd-app.conf
として、
管理したほうが安全だろうよ、というのがあるらしく、
今回はその思想に合わせて設定ファイルを直しました。
追記した
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
ではHTTP:Authorization
を受け取るよって内容が書いてあるらしく
(ちゃんと調べてないのでいいかげんな説明)
これがないばっかりにBitnami上のWordPressからは
無認証で投稿しているように見えてみたようです。
この設定変更で、認証が通り投稿されるようになりました。