HTMLでPHPを実行する方法 -apache,nginx-
今から9年前、10人前後の小さなWeb制作会社にいたころ、開発環境を構築するのに大変だった案件があります。
それは、
「.php」という拡張子がついたURLだと、ユーザが怪しむ可能性があるのでファイルの拡張子はすべて「.html」で表示させたい
という内容のものです。
当時のWebのプログラム言語は、PHPよりperlで作られることが多かったので、拡張子は「.cgi」のほうが多かったです。
それ以前に、「.html」で作られるのが当たり前というお客さんがほとんどだったので、「.php」「.cgi」というURLを気にする方がいたのは確かです。
この頃は転職したてで、Webの知識だけではなくインフラの知識もあまりなかったので、この問題を自力で解決出来た時はちょっと感動しました(笑)
ブログのネタ出しに過去の案件を思い出していたら、ふと思い出したので、本日はこの内容について書いてみたいと思います。
.html拡張子でphpを実行する方法
僕はApacheのWebサーバを利用が多いのですが、最近では、nginxというWebサーバも有名なので、そちらと合わせて紹介したいと思います。
なお、少々インフラの知識が必要になりますのでご了承ください。
Apacheの場合
Apacheの場合、方法は以下の2つです。
- .htaccessを利用する
- httpd.confに記述する
.htaccessを利用する
説明するより真似して記述したほうが早いと思うので、細かい説明は省きます。
まず基本的な記述として、
AddType application/x-httpd-php .html
か、もしくは
AddHandler application/x-httpd-php .php .html
と記述すればOKです。
また、利用しているサーバ次第ではうまく動かない場合があるので、その場合は、
php_flag allow_url_fopen on php_flag allow_url_include on
も追加すれば動くはずです。
また、特定のファイルのみ、htmlという拡張子でphpを実行したい場合は、
<Files "XXXXXX.html"> AddType application/x-httpd-php .html </Files>
の「XXXXXX.html」の部分を対象のファイルに書き換えてください。
httpd.confに記述する
格安のレンタルサーバの場合、編集権限を与えられていないことが多いので、この方法は不可能です。
その場合は.htaccessでトライしてください。
httpd.confに、<IfModule mime_module> ~ </IfModule>というタグで括られた箇所があるので、その中に
AddType application/x-httpd-php .php .html
を記述すればOKです。
なお、httpd.confを編集した場合は、httpdをrestartしないと反映されないので注意しましょう。
nginxの場合
以下のふたつの設定で実現できます。
「nginx/conf.d/hoge.virtual.conf」に下記を記述します。
# vim /etc/nginx/conf.d/XXXXXX.virtual.conf location ~ \.html$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.html; fastcgi_param SCRIPT_FILENAME /home/XXXXXX/htdocs$fastcgi_script_name; include fastcgi_params; }
なお、記述するファイル先は「default.conf」でもOKです。
次に「/etc/php-fpm.d/www.conf」に下記を記述します。
# vim /etc/php-fpm.d/www.conf security.limit_extensions = .php .php3 .php4 .php5 .html
コメントアウトされている場合は、コメントを外せばOKです。
上記ファイルの編集後は、nginxとphp-fpmを忘れずに再起動してください。
最後に
今となってはphpの拡張子の認知度は高いので、前述したような理由でphpを実行したいニーズはあまりないかと思います。
これに似た内容で、昔、.aspという拡張して同じような対応をしたことがあるので、共感できそうな経験をお持ちの方は、読んでいただければと思います。
余談:.aspをhtml拡張子で実行する
時は同じく今から9年前、当時はactionscript2.0が全盛期で、僕自身フラッシャーとしてFlashコンテンツをバリバリ制作していました。
そんな折、別の制作会社から「とあるクライアントのWebサイトの保守をお願いできないか」という打診がウチにありりました。詳しく聞いてみると、「aspっていうプログラムで動く簡単なCMSサイトである」ということがわかりました。
(後で聞いた話ですが、当時の社長は「アイツなら多分できるだろう」といった感じで、あまり考えずに引き受けたそうです。今思えば、そういう無茶振りのおかげで短期間で成長できたのかななんて思いました。まぁ倒産しちゃったんですけど、、、)
後日、郵送で送られてきたCD-Rからファイル一式を取得し「まずは環境でも再現させようかな」と、自社の開発用サーバにFTPするときに異変に気づきました。
ん?
aspって言ってたけど、これ全部拡張子がHTMLだぞ?
ソースを確認したところ、VBscriptの記述があるので間違いなくaspです。
どういうことなのかよくわからなかったので、早速、引き継ぎ前の製作会社に電話をしたところ、
あ〜、実はhtmlでaspが動くようにサーバ側でマッピングしていました。
ちなみに、サーバはIISです。
その場で「あ、そうですか。わかりました。ありがとうございました。」と言って電話を切りました。
えええ~!!!
てゆうかそんなことできるんですか!?
というのが僕の心の声がついつい口から出てしまいました。
とほほ、、、まぁ仕方ない。こうなったらやるしかない。
まず、そもそも会社にIISのWebサーバがなかったので、いらないPCにWindows server をインストールして、探り探り設定して、なんどか環境を作り上げました。
その後、IISの本を買ってきて四苦八苦しながら、マッピングの設定を行い、なんとか公開されているサイトと同じ挙動をするようにしました。
この間、丸2日かかりました。。。
動くようになった後、別の件で話をするついでに、なんでマッピングの設定を行っているのか尋ねたところ、
「URLの最後が.htmlじゃないのですが、サイトは本当に安全なのでしょうか?」という問い合わせが何件かあったため、クライアントから信用問題に関わるのでなんとかできないか
という相談を受けたことがキッカケとのことでした。
う〜む、なるほど。
大体同じような理由なのですね。。。
この記事書きながらもっといいアイデアがありましたので、また時間のあるときに紹介したいと思います。
コメント一覧
コメントはありません