お名前.com共用サーバーSDで拡張子.htmlをPHPとして実行する

 

お名前.comでは.htaccessの制限が厳しく、
AddType application/x-httpd-php .php .html
など、.htmlをPHP扱いさせるといった方法が使えません。

参考:
自分で用意した.htaccessファイルは使用できますか?

ただ、さり気なく、
上記のページにこう書いてあります。

※.phpファイルを別の拡張子で動作させるためには、
該当ファイルをcgiとして実行する記述を追記ください。

・・・というわけで、
『該当ファイルをcgiとして実行する記述』とはなんぞや、
という話になるわけでございます。

わからなかったので、
メールで問い合わせしてみました。

すぐに返事が帰ってきて感動しました。しかし、
「サポート外なのでご自分で書籍などでお勉強なさってください」
という冷たいものでした。

にわタコのBlogの見解としては、
この対応には不備があったと思います。

なぜなら『該当ファイルをcgiとして実行する記述』のためには、
お名前.comサーバー側からある情報を教えてもらう必要があるからです。

※若干不満に思っているところですが、
私が使った問い合わせフォームが一般のフォームだったため
未契約者として扱われて教えられなかった可能性もあります。

ともかく、
独自にハッキングして
(地道に総当りで探し当てただけですが)
必要な情報を見つけたので、
同じ道に迷った人々のために記録しておきます。

3つのステップ(ポイント)があります。

【ステップ1】
まずは、.htaccessに次のような記述をしてサーバーに配置します。

AddHandler cgi-script .html

と記述します。
これによって.htmlファイルがCGIとして実行されます。
これで、.htmlをcgiとして実行するよう命令されます。

※htaccessの約束、
最後は何もない行を入れて下さい。
つまり、上の内容だけで二行。

※windowsでは
.htaccess という形式でファイル名を作れません。
htaccess.txtとして作成し、
サーバーにアップロードしてから名前を変えてください。

【ステップ2】
このステップではCGIとして実行する際の実行元を指定します。
サーバーにCGI化されたPHPが用意されています。
ステップ1ではhtmlをCGIとして実行しろとhtaccessに書いたので、
そのCGIとはこれのことだよと教えてあげればいいわけです。

そうすればhtmlファイルがCGIモードのPHPによって実行されます。

どうするかというと、
すべてのHTMLファイルの最初の行に、
「私をこのCGIで実行して!!」
という命令を書き込みます。

この命令をお名前.comのお問い合わせは教えてくれなかったのですが
サーバープログラムのパス一覧にもCGI版PHPのパスは書かれていない

3日間かけて情報収集と当てずっぽうの記述を繰り返した結果
得られた命令文は次のようなものになります。

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

これをHTMLファイルの先頭行に加えるのですが、
実際のHTMLはこんな感じです。

#! /usr/local/bin/php-cgi
<!DOCTYPE html>
<html>
    <head>
        ・・・・・・・続く

※2014/01/03更新
これでは【ステップ3】実行後でも500 Internal Server Errorが発生するケースが有るようです。
(2014年1月3日に風柳様より頂いたコメントの情報)
ご提供頂いた情報によると、先頭の
#! /usr/local/bin/php-cgi を #! /usr/local/bin/php.cli
にすると動いたそうです。【ステップ3】後に500エラーが発生した場合はお試し下さい。

ただし、php.cliを使用した場合には一部制限があります。
そこで、本ブログの方法でphp.cgiが500になる場合でもphp.cgiを使う方法を、
(さらには #! /usr/…. を全htmlファイルに記述するのを回避する方法を!)
風柳様が考案されています。詳しくは風柳様のブログ記事
お名前.comの共用サーバーSDで拡張子htmlをPHPとして実行する方法
をご参照下さい。

【ステップ3】
もう完璧になったように見えますが、
このままでは、「Internal Server Error」が起きます。

CGIには実行許可がいるからです。
本来実行ファイルでないhtmlは
そのままでは実行されることが想定されていません。

パーミッションというのを設定して
実行許可を与える必要があります。

いわゆるパーミッション「755」や「705」です。

FTPソフトなどでサーバーのHTMLファイルを選択して
右クリックを押すと「属性」だとか
「パーミッション」だとかの選択肢があるので
そこからパーミッションの変更をしてください。

特に理由がなければ705でいいのではないでしょうか。
数字で指定できない環境の人のためにメモを残しますと、

705とは
所有者:読み 書き 実行
グループ:—
公開:読み 実行
です。

ちなみに755は
所有者:読み 書き 実行
グループ:読み 実行
公開:読み 実行
です。

以上でhtmlファイルがphpとして実行されるようになるはずです。

もしエラーが出た場合、
どのファイルにアクセスしてもダメな時は、
htaccessがうまく設定できているか確認しましょう。

一部のファイルだけの時は、そのファイルの先頭行に
#! /usr/local/bin/php-cgi
が記述されているかどうか、
そしてそのファイルのパーミッションが 705 or 755 か
確認してみてください。

この記事はお役に立ちましたか?


コメント

コメント(17)

  1. 通りすがりの者です。 on

    情報ありがとうございます。
    とても助かりました!
    感謝感激です。

    返信

  2. モバイル版GoogleAnalyticsの導入方法 on

    [...] 《お名前.com共用サーバーSDで拡張子.htmlをPHPとして実行する》 Category: 各種設定 2012年8月20日 at 8:00 AM No comments SUKE Leave a Comment or Cancel reply [...]

    返信

  3. ずっと悩んでいたものです。 on

    ありがとうございました。ほんとうに助かりました!

    返信

  4. ★ on

    ようやく解決できました!感謝です。
    本当にありがとうございます。

    返信

  5. 助かりました^^ on

    この情報探してました!
    ありがとうございます!

    >「サポート外なのでご自分で書籍などでお勉強なさってください」
    ありますねー、この対応^^;
    サポート外の理由があるんでしょうけど、
    お客さんに対して不親切すぎますよね。

    返信

  6. うぃさん on

    FAQにも情報がなく途方に暮れておりました。
    本当に助かりました。
    ありがとうございました。

    返信

  7. yuki0304 on

    混在する通常の.htmlファイルがエラーになってしまったのですが
    なにか対策はありますでしょうか?

    返信

    • にわタコ on

      申し訳ないですが的確に原因はわからないです。

      憶測ですが、通常のHTMLファイルにも
      #! /usr/local/bin/php-cgi
      を記述していただくことで、解消するかもしれません。

  8. 粋な男 on

    素晴らしいの一言です。

    「サポート外なのでお役に立てません」と言われ、本当に行き詰って困った時だったので感動しました。
    ありがとうございました。

    返信

  9. matsu on

    まったく同じ境遇でしたので、
    感動しました。
    本当にありがとうございました。

    返信

  10. 【GMO】お名前.com共有でhtmlファイルをPHPとして動かす方法 - 石崎智展のWEB技術研究所 on

    [...] した。 やはり同じようにサポートに冷たくされて調べたようです。 ブログ載せてくださったおかげで助かりましたm( _ _ )m 参考:お名前.com共用サーバーSDで拡張子.htmlをPHPとして実行する [...]

    返信

  11. ウナ on

    素晴らしすぎます!!
    感動しました!!

    返信

  12. ぱふお on

    下記手順にて作業致しましたが、500エラーが出てしまいます。
    お手数お掛け致しますが、解決方法についてご教授頂けませんでしょうか。宜しくお願いいたします。

    ①テキストファイルの1行目に AddHandler cgi-script .html を記述

    ②最終行1行をあける

    ③ファイル名htaccess.txt 。文字コードUTF-8Nで保存し、FFFTPでアスキーモードでサーバへ配置

    ④htaccess.txt となっているファイル名を .htaccess に変更

    ④.haccessのパーミッションを604に変更

    ⑤#! /usr/local/bin/php-cgi をHTMLファイルの先頭に記述

    ⑥HTMLをサーバーに配置

    ⑦HTMLファイルのパーミッションを705に変更

    ⑧作業完了

    ※ディレクトリは下記のとおり

    http;//www.ドメイン/tst/.htaccess 
          /.index.html

    返信

  13. 風柳 on

    有用な記事をありがとうございます。

    ただ、当方の使用している共用サーバSDだと、なぜかこの方法だとうまくいきませんでした(500 Internal Server Errorが発生)。
    ※なお、*.htmlのshebangを
    #! /usr/local/bin/php.cli
     に変更すると、一応動作しました。
    サーバによって設定が異なるのかもしれませんね。

    そこで、別の方法を試したところうまくいったので、記事にしてみました。
    http://d.hatena.ne.jp/furyu-tei/20131230/1388396025
    ご参考まで。

    返信

  14. 風柳 on

    記事内での補足ありがとうございます。

    念のためですが、

    #! /usr/local/bin/php.cli

    の設定ですが、php.cli は CLI SAPI版のため、CGI SAPI版(php-cgi)と比べると制限があるのでご注意ください。

    ・HTTPヘッダが出力されない(header()関数等が無効)
    ・$_GET, $_POST, $_REQUEST などが設定されない、等。

    先のコメントにURLで示しました通り、CGI-Wrapperを介して php-cgi を使用する方法の方がベターだと思われます。

    返信

    • にわタコ on

      ありがとうございます。
      風柳様ご考案のCGI-Wrapperを作成する方法が
      Wrapperの作成とhtaccessの記述だけでhtmlファイルのPHPを実行出来るので良さそうですね。
      記事中にコメントで頂いたURLへリンクを貼らせていただきます。

  15. どい on

    ちょうど同じ悩みにブチあたっていたので、大変助かりました!
    お名前.comのサポートよりも親切です(笑)

    返信

ずっと悩んでいたものです。 にコメントする (キャンセル)