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 では 置き場所を間違えると効かない
- セキュリティプラグインの「不明ファイル警告」は 中身を確認したうえで無視すべき場合もある
次に同じ壁にぶつかる人の参考になれば幸いです。