🐘
.htmlファイル内でPHPを動作させる
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それぞれのハンドラの違いについて
ちなみにハンドラをマップする方法に SetHandler
と AddHandler
がありますが前者で書いた場合はデフォルトの動きを上書きし実行を強制します。
- AddHandlerについて
http://httpd.apache.org/docs/2.2/ja/mod/mod_mime.html#addhandler - SetHandlerについて
http://httpd.apache.org/docs/2.2/ja/mod/core.html#sethandler
今回のconfファイル以外にも.htaccessなどに条件を追加する際にこれら2つを使うことがありますが、AddHandlerで設定が反映されないときはSetHandlerを試してみてください。(もちろんオーバーライドして設定してしまうので使うときは諸々の設定を確認してからにしましょう!)
最後に
Apacheを再起動して設定を反映させます。
$ sudo systemctl restart httpd
参考
Discussion