WordPress サブディレクトリ運用での格闘記録:wp-admin/.user.ini に落ち着くまで

パソコン

meta description:
WordPress サブディレクトリ運用でメディアアップロードサイズを拡大したいとき、.htaccess では効かず、php.ini では全体に影響…。格闘の末、wp-admin/.user.ini に設定することで解決した実録と注意点を解説します。


背景:アップロード制限との戦い

WordPress を長く使っていると必ずぶつかるのが メディアアップロードの制限
初期状態では数 MB しか上げられず、大きめの PDF や動画を扱いたいときに引っかかる。

私の環境はちょっと特殊で、

  • 公開URL: https://hd0.biz/
  • 管理画面: https://hd0.biz/wpm/wp-admin/

という サブディレクトリ運用
「じゃあ php.ini で全体を上げればいい」…と思うと、他サービスに影響が出てしまう。
「wp-admin だけ上げたい」 が今回の格闘の出発点。


試行錯誤その1:.htaccess に書いたけど効かない

最初にやったのは /var/www/html/.htaccess への追記。

php_value upload_max_filesize 512M
php_value post_max_size 544M
php_value max_execution_time 300
php_value max_input_time 300

ところが PHP-FPM 環境では .htaccess が効かない
Apache の error.log にはこんな感じで怒られる:

[core:alert] /var/www/html/.htaccess: <LocationMatch not allowed here

「なんでや…」と悩んで数時間。


試行錯誤その2:php.ini 全体に設定 → 影響範囲が広すぎる

次に /etc/php.d/ 配下に設定ファイルを作ってみた。
これだと確かに反映されるけど、全体の PHP 実行環境に適用される

サーバーは WordPress 以外のサービスも動いているため、これは却下。


解決のヒント:.user.ini

調べると、PHP-FPM は .user.ini を優先する仕様。
試しに wp-admin/ 直下に .user.ini を配置してみた。

upload_max_filesize=512M
post_max_size=544M
max_execution_time=300
max_input_time=300

確認コマンド:

stat /var/www/html/wpm/wp-admin/.user.ini
sed -n '1,200p' /var/www/html/wpm/wp-admin/.user.ini

ちゃんと置けていて、wp-admin 内のアップロードで反映された。
「wp-admin だけ大きくする」 という狙いどおりの挙動に。


副作用:Wordfence が「不明ファイル」扱い

ここで出てきたのがセキュリティプラグイン Wordfence。

管理画面で赤字の警告:

WordPress コアの不明なファイル: wp-admin/.user.ini
種類: ファイル
問題を発見

中身を見れば harmless(ただの制限値変更)。
でも「重大」と出ているのは気分が悪い。

対処法

  • Ignore (無視) 設定を入れる
  • もしくは .htaccess で外部からの直接アクセスをブロック
<Files ".user.ini"> Require all denied
</Files>

これで「見えるけど安全」「警告は無視してOK」という落としどころに。


教訓:サブディレクトリ運用は置き場所が肝

今回の格闘で分かったのは、

  • .htaccess:PHP-FPM 環境では効かない
  • php.ini:全体に影響してしまう
  • .user.ini:ディレクトリ単位で効かせられる

という棲み分け。

「wp-admin にだけ効かせたい」なら .user.ini 一択
Wordfence の赤警告は少し面倒だが、中身を理解していれば怖くはない。


まとめ

  • アップロード制限を突破するなら .user.ini が確実
  • サブディレクトリ型の WordPress では 置き場所を間違えると効かない
  • セキュリティプラグインの「不明ファイル警告」は 中身を確認したうえで無視すべき場合もある

次に同じ壁にぶつかる人の参考になれば幸いです。