🐘

.htmlファイル内でPHPを動作させる

2023/10/05に公開

Amazon Linuxで構成されたサーバーにて.htmlファイル内に記述されたPHPを動かす環境を用意する必要があったため、その際に行った設定を記録しておきます。

やること

以下の2つのファイルを編集して.html拡張子を処理する設定を追加します。

  • /etc/php-fpm.d/www.conf
  • /etc/httpd/conf.d/php.conf

環境

Apache2.4.10以降

① www.conf の設定を変更

パス: /etc/php-fpm.d/www.conf

security.limit_extensions = .php .php3 .php4 .php5 .php7 .html
↑ コメントアウトを外して有効にし 拡張子 .html を末尾に追加

security.limit_extensions とは

FPMがパースするクリプトの種類を拡張子で制限することができます。
特定の拡張子だけパースさせるように制限することで、想定外の拡張子のプログラムでphpのコードが実行されるのを防ぐことができます。
またこれによりサーバー側の人為的な設定ミスでの被害を抑えたりすることができます。
デフォルト値: .php .phar

② php.conf の設定を変更

パス: /etc/httpd/conf.d/php.conf

<IfModule !mod_php.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch \.(php|phar|html)$> ← ここにhtmlの記述を追加
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
</IfModule>

条件にhtml拡張子を追加することで下行のphp-fpmがhtmlにおいても動作してくれるようになります。

AddとSetそれぞれのハンドラの違いについて

ちなみにハンドラをマップする方法に SetHandlerAddHandler がありますが前者で書いた場合はデフォルトの動きを上書きし実行を強制します。

今回のconfファイル以外にも.htaccessなどに条件を追加する際にこれら2つを使うことがありますが、AddHandlerで設定が反映されないときはSetHandlerを試してみてください。(もちろんオーバーライドして設定してしまうので使うときは諸々の設定を確認してからにしましょう!)

最後に

Apacheを再起動して設定を反映させます。

$ sudo systemctl restart httpd

参考

https://www.php.net/manual/ja/install.fpm.configuration.php
https://httpd.apache.org/docs/2.2/ja/mod/mod_mime.html

Discussion