Amazon Lightsail の WordPress Multisite で REST API で投稿しようとしたらつまづいたので設定を直した、って記事

AWSで構築するWordPress環境としてLightsailって便利な選択肢があります。
[Amazon Lightsail の WordPress Multisite](https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-quick-start-guide-wordpress-multisite)
WordPressがBitnami（というWebサービスをパッケージ化して使えるようにするもの）で
提供されていて、導入がめちゃくちゃ楽です。
また、WordPressのMultisiteでは、一つのエンジンでいくつものサイトを作れるので、
ちょこっとWordPressの実験をしたい、テーマのアレコレをいじってみたい、
なんてときに便利だったりします。
が、REST APIをデフォルトで受け付けない仕様らしく、
対処方法もマイナーすぎて泥沼にはまり込んだのでメモを残します。

# やりたかったこと
WordPressへ自動投稿をするのにあたり、REST APIをつつきたかった。

## つまづいたこと
Pythonで書いたREST APIでの投稿が、別の環境では通るのに、
Lightsailではエラーになった。

## エラーってた理由
```.htaccess```に下記の表記がないとWordPressが受け付けてくれない。
```.htaccess
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
```


## 沼ってた理由
BitnamiのWordPressには```.htaccess```がファイルとして存在しない。
※同等の機能があるけど、違う形式のファイルになってる

そのファイルが何であるのかと、どう直せばよいのかを把握するのに時間がかかった。

> 結論から書くと、次のリンク先のページに今回の解決方法の解があります。
この記事は、そのページのリライトに近い内容です（書くと覚えるから）。
[WordPress REST APIを使用して記事を投稿する](https://www.premium-tsubu-hero.net/worpdpress-restapi-post01/#:~:text=httpd%2Dapp.conf-,%E4%BB%A5%E4%B8%8B%E3%82%92%E8%BF%BD%E8%A8%98,-%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)

# 手順
## 概要
```bash
$ sudo nano /opt/bitnami/apps/wordpress/conf/httpd-app.conf
$ sudo /opt/bitnami/ctlscript.sh restart apache
```
上記の内容は
- 設定ファイルを開く（それで三行ほど追記）
- apacheを再起動
って流れです。
## 設定ファイルの修正について

### 追加したコード
```httpd-app.conf
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
```

### 追記後の```httpd-app.conf``` の全文
```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```として、
管理したほうが安全だろうよ、というのがあるらしく、
今回はその思想に合わせて設定ファイルを直しました。

追記した
```httpd-app.conf
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
```
では```HTTP:Authorization```を受け取るよって内容が書いてあるらしく
（ちゃんと調べてないのでいいかげんな説明）
これがないばっかりにBitnami上のWordPressからは
無認証で投稿しているように見えてみたようです。
この設定変更で、認証が通り投稿されるようになりました。