kusanagi apache2.4でhtmlファイルの中でphpを動かす設定
WordPress入りのサーバー引越しを
①Freebsdの古いやつ apache 1.3.41 php5.2系 MySQL 5.0系
②CentOS7 kusanagi apache 2.4 php7.2 MySQL(MariaDB)5.7
③CentOS7 kusanagi Nginx1.13 php7.2 MySQL(MariaDB)5.7
という流れで行っています。
①は、ドキュメントルートで、htmlファイルがWordPressの外にあり、さらにhtmlファイルの中ではphpが動いてます。WordPress領域外に各種moduleがありincludeでhtmlファイルなどに読み込まれています。プラグインやテーマの影響範囲外にhtml(phpが書かれている)ファイルがあるため、ワードプレス更新時、ワードプレスのスコープ外なファイル達の修正コストが高く、SSL化を検討したところ、HTMLファイル内でハードコーディングなども見られたため、引越のついでにWordPress領域外にあるhtmlファイルを全てWPテーマに取り込むことにしました。
②の工程でkusanagi apache2.4でミドルウェアの設定をいくつか書き換えましたので以下へメモとして残します。最終的にNginxで動かす時は、htmlファイルをphpファイルに全て書き換えます。
②の段階でkusanagiは、以下の様にプロヴィジョニングしています。
kusanagi init --tz Tokyo --lang ja --keyboard ja --httpd --php7 --ruby24
apache2.4でphp7という感じです。
※CircleCIを使う場合、Linuxユーザーkusanagiのキーペアのパスフレーズは無しにすることを強く推奨します。
phpとapacheの両方からhtmlの中でphpを許可する設定が必要です。
ググるとよく出てくる .htaccess や httpd.conf や php.ini の変更 だけでは出来ず、ハマりました。
php7の設定変更
/etc/php7-fpm.d/www.conf の 388行目
;security.limit_extensions = .php .php3 .php4 .php5 .php7
を
security.limit_extensions = .php .php3 .php4 .php5 .php7 .html
に変えます。ここが一番の肝ですが、非推奨設定です。③になったら戻すつもりで行います、②の段階として一時的な措置です。見るからにlimit外したくないですね・・・、精神的にぐっと不安が増す設定・・・。
apache2.4のバーチャルホスト設定変更
②の段階で、2箇所編集しました。
/etc/httpd/httpd.confの78行目
AddOutputFilter INCLUDES .shtml 後に以下の2行追加します。
AddType application/x-httpd-php .php .html
AddHandler application/x-httpd-php .php .html
定番の設定ですが、これだけでは足りませんので、以下の設定も行います。
/etc/httpd/httpd.confの137行目
<FilesMatch \.php$>
を
<FilesMatch \.(php|html)$>
に変えます。htmlファイルを404とせず、認識させる設定です。
kusanagiの各種confファイルを読み漁りました。かなり時間がかかります。
書き換えする時はgitバージョン管理などをしたほうがいいです。
注意点
非SSLでWPをapache運営している場合、yum updateで「プロファイル名_ssl_html.conf」の中身が書き換わり、headers_moduleの再読み込みによるapacheのskipが起こり、apacheのstatusがfailedになります!systemctl restart httpd.serviceやってもダメです。「プロファイル名_ssl_html.conf」や「ssl.conf」が読み込まれない様に「プロファイル名_ssl_html.conf.bk」や「ssl.conf.bk」などにファイル名を書き換えてapacheを起動できるようになります。