WordPressのパーマリンク設定変更時に.htaccessを更新できない問題(Amazon Linux2(ec2),CentOS7)

WordPressのパーマリンク設定変更時に.htaccessファイルの更新ができなかったり、記事の編集や新規投稿時に「公開に失敗しました。返答が正しい JSON レスポンスではありません。」というエラーメッセージが出たので、その時の解決方法について説明しています。

※ 本ページはプロモーションが含まれています。

目的(エラー内容)と動作環境

最終更新日:2022/1/10

以前に、Apache、PHP7、MariaDB、そしてWordPressを全てコマンドラインからインストールして、WordPressの環境構築をしました。
WordPress環境構築サイトマップ

WordPressの環境構築が完了して、まずはパーマリンク設定を変更しようとしたのですが、変更した時に「.htaccessファイルを更新してください。」というメッセージと「.htaccessファイルが書き込み可能であれば自動的に実行されますが、書き込み可能でなければ、mod_rewrite ルールを .htaccess ファイルに追加する必要があります。」いうメッセージと.htaccessのリライトルールが表示されました。
.htaccessファイルを更新してくださいというメッセージ。WordPressでパーマリンク設定変更時

.htaccessのリライトルールとhtaccessファイルが書き込み可能であれば自動的に実行されますというメッセージ

またこの後に、記事の新規投稿や投稿した記事の編集をしようとすると「更新に失敗しました。 返答が正しい JSON レスポンスではありません。」というエラーメッセージが表示され、新規投稿や編集ができなくなりました。他にも、WordPressの個別記事にもアクセスできなくなりました(Not Found)。
WordPressのエラーメッセージ「更新に失敗しました。 返答が正しい JSON レスポンスではありません。」

ここでは、この問題のトラブルシューティングについて書いていきます。

■環境とバージョン情報です。
WordPress:5.8
ウェブサーバ:Apache2.4
PHP:7.4
MariaDB:10.6

試したOS環境は2つで、ec2のAmazon Linux2とCentOS7です。
・ec2(Amazon Linux 2)

$ cat /etc/system-release
Amazon Linux release 2 (Karoo)
・CentOS7.9
$ cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

別ページでさくらインターネットのレンタルサーバ上でWordPress環境を構築する説明をしていますので、よろしければ参考にしてみてください。
さくらのレンタルサーバで独自ドメインでWordPressを始める

さくらのレンタルサーバは、WordPressのクイックインストール機能がありますし、Apache、PHP、MySQLなども最初からインストールされていて、基本的にセキュリティ面で注意したり、メンテナンスの手間をかける必要もないので、WordPress環境を手っ取り早く構築して始めたい人や、サーバやネットワークの知識があまりない初心者、入門者の人にもお勧めです。

サーバのディレクトリの所有者権限を変更して、WordPressの設定変更時に.htaccessを出力できるようにする

まず、パーマリンクの設定変更時に「.htaccessファイルを更新してください。」というメッセージが出た問題についてですが、WordPressはApacheの.htaccessファイルを利用していて、本来なら何か設定を変更した時にこの.htaccessファイルが自動的に出力されたり編集されます。

ただ、今回このメッセージが出た時は、サーバ上の所有者権限の問題で.htaccessファイルの出力ができない状態になっていました。

私の環境では、/var/www/html/weblogディレクトリにWordPressの本体を置いたのですが、weblog以下の全てのディレクトリとファイルのユーザとグループの所有者権限が1006かrootのままにしていました。

$ ls -l /var/www/html
合計 4
drwxr-xr-x. 5 1006 1006 4096 11月 18 02:25 weblog

$ ls -lta /var/www/html/weblog
合計 220
drwxr-xr-x.  3 root root    20 11月 19 01:44 ..
drwxr-xr-x.  5 1006 1006  4096 11月 18 02:25 .
-rw-r--r--.  1 root root  4061 11月 18 02:25 wp-config.php
-rw-r--r--.  1 1006 1006 10083 11月  4 20:00 readme.html
-rw-r--r--.  1 1006 1006  4068 11月  4 20:00 wp-config-sample.php
drwxr-xr-x.  5 1006 1006    69 11月  4 20:00 wp-content
drwxr-xr-x. 25 1006 1006  8192 11月  4 20:00 wp-includes
drwxr-xr-x.  9 1006 1006  4096 11月  4 20:00 wp-admin
〜

ですので、weblogディレクトリ以下のディレクトリとファイルの所有者権限をapacheに変更します。

$ sudo chown -R apache:apache /var/www/html/weblog

$ ls -l /var/www/html
合計 4
drwxr-xr-x. 5 apache apache 4096 11月 18 02:25 weblog

$ ls -lta /var/www/html/weblog
合計 220
drwxr-xr-x.  3 root   root      20 11月 19 01:44 ..
drwxr-xr-x.  5 apache apache  4096 11月 18 02:25 .
-rw-r--r--.  1 apache apache  4061 11月 18 02:25 wp-config.php
-rw-r--r--.  1 apache apache 10083 11月  4 20:00 readme.html
-rw-r--r--.  1 apache apache  4068 11月  4 20:00 wp-config-sample.php
drwxr-xr-x.  5 apache apache    69 11月  4 20:00 wp-content
drwxr-xr-x. 25 apache apache  8192 11月  4 20:00 wp-includes
drwxr-xr-x.  9 apache apache  4096 11月  4 20:00 wp-admin
〜

これでパーマリンクの設定変更をしても、問題のメッセージは表示されなくなります。

また、/var/www/html/weblogディレクトリ下に.htaccessファイルが出力されたのが確認できました。

$ ls -lta /var/www/html/weblog
合計 224
-rw-r--r--.  1 apache apache   612 11月 19 01:50 .htaccess
drwxr-xr-x.  5 apache apache  4096 11月 19 01:50 .
drwxr-xr-x.  3 root   root      20 11月 19 01:44 ..
-rw-r--r--.  1 apache apache  4061 11月 18 02:25 wp-config.php
-rw-r--r--.  1 apache apache 10083 11月  4 20:00 readme.html
-rw-r--r--.  1 apache apache  4068 11月  4 20:00 wp-config-sample.php
drwxr-xr-x.  5 apache apache    69 11月  4 20:00 wp-content
drwxr-xr-x. 25 apache apache  8192 11月  4 20:00 wp-includes
drwxr-xr-x.  9 apache apache  4096 11月  4 20:00 wp-admin
〜

Apacheの設定変更をして、.htaccessファイルの内容が有効になるようにする

.htaccessファイルの出力の問題は解決できましたが、まだ記事の新規投稿時に「公開に失敗しました。 返答が正しい JSON レスポンスではありません。」というエラーメッセージが出ます。

このエラーは、.htaccessファイルが正常に配置されたけど、Apacheの設定の問題で.htaccessファイルが有効になっていないためです。 ですので、.htaccessファイルが有効になるように設定する必要があります。

Apacheの設定ファイルの/etc/httpd/conf/httpd.confファイル内にある、<Directory "/var/www/html">ディレクティブ内の"AllowOverride None"を"AllowOverride All"に変更します。
・編集前

<Directory "/var/www/html">
〜
    AllowOverride None
〜
</Directory>
・編集後
<Directory "/var/www/html">
〜
    AllowOverride All
〜
</Directory>
これで、.htaccessファイルがあれば有効になるはずです。

または、WordPressの本体があるディレクトリだけに設定を適用したい場合、例えば、/etc/httpd/conf.d/wp.confファイルを新規作成して、下のように編集してもいいです(下はWordPress本体を/var/www/html/weblogディレクトリに置いた場合)。

$ cat /etc/httpd/conf.d/wp.conf 
<Directory "/var/www/html/weblog">
  AllowOverride All
</Directory>

編集できたら、Apacheを再起動します。

$ sudo systemctl restart httpd

これで、記事の新規投稿や編集をしたら、問題なくできるようになりました!

[広告] WordPressのセキュリティ本の紹介

WordPressセキュリティ大全

WordPress運営者向けのセキュリティ本です。WordPressのセキュリティ脆弱性・基本知識についてや、WordPressのセキュリティ対策の設定やセキュリティ対策のプラグインなどが紹介されています。
WordPressのセキュリティが気になっていたり、基本的な事を抑えておきたい、セキュリティについて自信がない入門者・初心者向けの1冊です。