コンテンツにスキップ

WP-CLI の wp rewrite flush --hard を実行しても .htaccess ファイルが更新されない問題

メインイメージ

WordPress のコマンドラインツール WP-CLI は中〜上級者が WordPress サイトを効率的に管理するのに有用なツールです。

ここでは WP-CLI で「 wp rewrite flush --hard コマンドを実行しても .htaccess ファイルが更新されない問題」について説明します。

確認時のバージョン

  • WP-CLI 2.10.0

wp rewrite flush --hard コマンドとは?

wp rewrite flush --hard コマンドは WordPress のリライトルールをリセットし、その変更を .htaccess ファイルに反映させるものです。 --hard オプションは .htaccess の書き換えを行うことを意味します。

発生する問題

wp rewrite flush --hard コマンドを実行しても .htaccess ファイルが更新されません。

wp rewrite flush --hard

wp rewrite flush --hard

原因と解決策

さまざまな原因が考えられます。

A. WP-CLI の設定の不足

コマンド実行時に次のような出力がされる場合は WP-CLI の設定が不足していることが原因です。

Warning: Regenerating a .htaccess file requires special configuration. See usage docs.

これを解消するには WP-CLI の設定( wp-cli.yml など)で apache_modulesmode_rewrite を追加する必要があります。

wp-cli.yml:

apache_modules:
  - mod_rewrite

このことは 公式リファレンス でも説明されています。

To regenerate a .htaccess file with WP-CLI, you’ll need to add the mod_rewrite module to your wp-cli.yml or config.yml. For example:

apache_modules:
  - mod_rewrite

WP-CLI の設定ファイル wp-cli.yml についてはいくつかの設置パス・ファイル名のパターンが可能です。 詳しくは公式のリファレンスを確認してください。

B. .htaccess ファイルに書き込み権限が無い

コマンド実行時に次のような成功メッセージが表示されるのに .htaccess ファイルが更新されない場合もあります。

Success: Rewrite rules flushed.

この場合はいくつかの原因が考えられます。

まず考えられるのは .htaccess ファイルに書き込み権限が無いパターンです。 この場合の解決策は .htacess ファイルに書き込み権限を付与することです。

# .htaccess ファイルに書き込み権限を追加する
chmod u+w .htaccess

WP-CLI を実行するユーザーと .htaccess ファイルの所有者が異なる場合は、所有者の変更が必要なこともあります。

例:

chown $(whoami) .htaccess

C. .htaccess が存在せずディレクトリに書き込み権限が無い

B と似ていますが、元々 .htaccess ファイルが存在せず WordPress インストールディレクトリに書き込み権限が無い場合も .htaccess ファイルが作成されません。

この場合の解決策はインストールディレクトリに書き込み権限を追加することです。

# インストールディレクトリに書き込み権限を追加する
cd /path/to/wordpress/root
chmod u+w .

A B C のどのパターンでも、 .htacess の書き込み以前のリライトルールの更新が成功すれば「 Success: Rewrite rules flushed. 」というメッセージが出力されてしまい、また .htaccess の書き込みに失敗してもわかりやすいメッセージが出力されないため、原因を自分で探す必要があります。

A B C の他にも原因となりうるものはいろいろありますが、おそらくこの 3 つが最もよくある原因では無いかと思います。

公式リファレンス

関連リポジトリ