0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Amazon LinuxでWordPressを立てた時にカスタムパーマリンクが機能しない時の対処法

Last updated at Posted at 2024-02-12

この記事について

前回の記事の執筆後にWordPressのパーマリンクを変更すると「更新に失敗しました。返答が正しいJSONレスポンスではありません。」とのエラー...
WordPressを初めて触っていたこともあり、何が原因かわからないエラー文に悪戦苦闘しましたが、なんとなく状況が理解できてきたので得られた知見をまとめました。
おそらく、really simple sslのプラグインが悪さしているのでしょうが...

image.png

問題が発生した状況

AWSのアーキテクチャ:前回の記事を参照
パーマリンク:基本以外の設定にした時

結論

  1. 以下のように mod_rewriteモジュールの有効化
    $ sudo su - 
    $ vi /etc/httpd/conf/httpd.conf
    
  2. mod_rewrite を有効化する
    <Directory "/var/www/html">
        AllowOverride None  //この1行を以下のように修正
        AllowOverride All
    </Directory>
    
  3. httpdサービスの再起動
    $ systemctl restart httpd.service
    

おそらくこれでパーマリンクを変更しても無事に公開することができるようになります!

詳細

そもそもの原因

.htaccess で制御している Rewritemod_rewrite モジュールの無効化によって機能していないことです。
ここでそれぞれのワードについて簡単にまとめておきます。

  • .htaccess:Webサーバの動作をディレクトリ単位で制御するためのファイル。Apacheなどで使用されている。
  • Rewrite.htacess 内で記述・制御されるもので、特定のURL宛てに飛んできたリクエストを、ルールに従って異なるURLに転送することができる。.htaccess では以下のように記述されている。
    .htaccess
    ~~ 省略 ~~
    RewriteEngine on
    RewriteRule リダイレクト元 リダイレクト先
    ~~ 省略 ~~
    
  • mod_rewrite.htaccessRewrite の処理で走る Apache のモジュール。

つまり、以下のようになっていることが問題です。(厳密ではないですが)
WordPress-htaccess-mod_rewriteの関係性.png

対処法

1. .htaccessが存在するか確認する

一応本題に入る前に前提のすり合わせです。
パーマリンクの変更に伴い、 .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 の設定を変更する

ここからは結論で述べたことと同じです。

  1. 以下のように mod_rewriteモジュールの有効化
    $ sudo su - 
    $ vi /etc/httpd/conf/httpd.conf
    
  2. mod_rewrite を有効化する
    おおよそ156行目周辺にあると思います。
    <Directory "/var/www/html">
        AllowOverride None  //この1行を以下のように修正
        AllowOverride All
    </Directory>
    
  3. httpdサービスの再起動
    $ systemctl restart httpd.service
    

これでパーマリンクの挙動が治ると思います。

補足:Rewrite と Redirect の違い

私も今回詳しく調査するまで曖昧だったのですが、RewriteRedirect は異なる処理を行います。
細かな違いは様々ありますが、一番の違いはRewrite はURLが変更前と変更後で変わらず、 Reedirect はURLが変わるという点です。
rewriteとredirectの違い.png

このことからも、WordPressのパーマリンクは Rewrite が使われていることが分かります。
参考:RewriteRuleとRedirectの違い【Apache】

まとめ

Webサーバについてもっと勉強せねば...
ただ、WordPressももう少しエラー文わかりやすくしてくれ...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?