この記事について
前回の記事の執筆後にWordPressのパーマリンクを変更すると「更新に失敗しました。返答が正しいJSONレスポンスではありません。」とのエラー...
WordPressを初めて触っていたこともあり、何が原因かわからないエラー文に悪戦苦闘しましたが、なんとなく状況が理解できてきたので得られた知見をまとめました。
おそらく、really simple sslのプラグインが悪さしているのでしょうが...
問題が発生した状況
AWSのアーキテクチャ:前回の記事を参照
パーマリンク:基本以外の設定にした時
結論
- 以下のように mod_rewriteモジュールの有効化
$ sudo su - $ vi /etc/httpd/conf/httpd.conf -
mod_rewriteを有効化する<Directory "/var/www/html"> AllowOverride None //この1行を以下のように修正 AllowOverride All </Directory> - httpdサービスの再起動
$ systemctl restart httpd.service
おそらくこれでパーマリンクを変更しても無事に公開することができるようになります!
詳細
そもそもの原因
.htaccess で制御している Rewrite が mod_rewrite モジュールの無効化によって機能していないことです。
ここでそれぞれのワードについて簡単にまとめておきます。
-
.htaccess:Webサーバの動作をディレクトリ単位で制御するためのファイル。Apacheなどで使用されている。 -
Rewrite:.htacess内で記述・制御されるもので、特定のURL宛てに飛んできたリクエストを、ルールに従って異なるURLに転送することができる。.htaccessでは以下のように記述されている。.htaccess~~ 省略 ~~ RewriteEngine on RewriteRule リダイレクト元 リダイレクト先 ~~ 省略 ~~ -
mod_rewrite:.htaccessのRewriteの処理で走る Apache のモジュール。
つまり、以下のようになっていることが問題です。(厳密ではないですが)

対処法
1. .htaccessが存在するか確認する
一応本題に入る前に前提のすり合わせです。
パーマリンクの変更に伴い、 .htaccess は上書きされます。
「基本」であれば記述はありませんが、カスタムパーマリンクであれば記述が加えられます。
以下のような内容が書かれていたら問題ありません。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
2. httpd.conf の設定を変更する
ここからは結論で述べたことと同じです。
- 以下のように mod_rewriteモジュールの有効化
$ sudo su - $ vi /etc/httpd/conf/httpd.conf -
mod_rewriteを有効化する
おおよそ156行目周辺にあると思います。<Directory "/var/www/html"> AllowOverride None //この1行を以下のように修正 AllowOverride All </Directory> - httpdサービスの再起動
$ systemctl restart httpd.service
これでパーマリンクの挙動が治ると思います。
補足:Rewrite と Redirect の違い
私も今回詳しく調査するまで曖昧だったのですが、Rewrite と Redirect は異なる処理を行います。
細かな違いは様々ありますが、一番の違いはRewrite はURLが変更前と変更後で変わらず、 Reedirect はURLが変わるという点です。

このことからも、WordPressのパーマリンクは Rewrite が使われていることが分かります。
参考:RewriteRuleとRedirectの違い【Apache】
まとめ
Webサーバについてもっと勉強せねば...
ただ、WordPressももう少しエラー文わかりやすくしてくれ...
