さくらインターネットで.htmlを.phpとして動かす方法

2016年9月11日ウェブサイト作成

さくらインターネットのマニュアルでは html ファイルを php ファイルとして動かすことはできないとされています。が、自己責任でやる分には問題ないようで、わりと簡単に実現できます。

しかし、.htmlを.phpとして動かす方法としてよく解説されている「.htaccess」への「Action myphp-script~」の記述だけでは機能しないため、一手間必要になります。

  1. php-cgiへのパスを書いたphp.cgiファイルを用意する
  2. .htaccessにphp.cgiのパスを書き足す
  3. php.cgiファイルとディレクトリのパーミッションを755に設定する

かつては php-cgi を自分のディレクトリにコピーしたり、パーミッションの設定も必要だったようですが、私が使っている限りでは上の3つの手順で動いています。

設置と設定

php.cgiの設置

ウェブサイトのルートとなるディレクトリの適当な場所に php.cgi を作ります。ここでは /bin の下においていますが、好きなところで構いません。

さくらインターネットPHP

 

php.cgiの記述

上で作成した php.cgi ファイルの中身は下のように記述します。

#!/bin/sh
exec /usr/local/bin/php-cgi

php-cgiファイルそのものをコピーして設置する方法もありますが、バージョン管理に難が出るのでこれでいけるようにしてるのかもしれません。

パーミッションの設定

/bin ディレクトリも php.cgi もパーミッションは755か705です。phpとして実行したい html ファイルや php のパーミッションも755にするよう書かれていますが、特になにもしなくても動いてます。

.htaccessの設定

あとは php として実行したい html のあるフォルダに下のように記述した.htaccessを置けば完了です。

サイトにあるhtmlファイルすべてをphpとして実行させたければ、ウェブルートディレクトリにある .htaccess に次の情報を追記します。

Action myphp-script /bin/php.cgi
AddHandler myphp-script .php .html
 
特定のファイルだけを対象にしたい場合は<Files “index.html">~</Files>のように、対象ファイルを指定します。
<Files "index.html">
Action myphp-script /bin/php.cgi
AddHandler myphp-script .php .html
</Files>

注意点

html で作ったサイトを上の手順で PHP 化したところ googlebot は変わらず読みに来てしっかりインデックスもされていました。

が、サーバのログを見たところbingbotがやたらエラーを残していたので気になって bing web マスターツールを覗くと、なぜかインデックスしなくなっていました。

「Bingbot として取得」をすると「状態: 4xx の HTTP ステータスコードが返されました。」と出る。html としてはきちんと読めていたのに、bot では読み込めない。

パーミッションをはじめいろいろ試した後サーバの設定を見ると、「国外IPアドレスフィルタ」の項目とマニュアルを発見。

国外IPアドレスフィルタ – さくらのサポート情報

弊社にて管理する国内IPアドレスリストに含まれていないIPアドレスからのアクセスを制限します。
※Googlebot は有効化の状態でもアクセス可能です。

HTTP/HTTPS制限対象範囲
ファイル
php.cgi php5.cgi  php-cgi等
^php[0-9]?([\.\-]cgi)?$
お客様設置の PHP バイナリファイル

ようするに googlebot は国外IPアドレスだけどフィルタ対象外だから正常に作動する。しかし bingbot はアクセス制限の対象だったために拒否されていたわけです。

解決策

というわけで、「国外IPアドレスフィルタ」の「アクセス制限設定」を「無効」にすればOK。

国外IPアドレスフィルタを無効にした後「Bingbot として取得」を試してみるとあっさり成功。

 

googlebot がクロールエラーになっていればすぐ気づいたんですが、ブラウザでは正常に表示される上にグーグルもインデックスしてくれているでは、すぐには気づきませんわ。

どちらも検索エンジンクローラーには違いないのに、google はよくて bing はだめってややこしいですね。

だけどこの件がなかったら海外からのアクセスが規制されたままだったので、これはこれでよかったのかなと。