お名前.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 か
確認してみてください。
通りすがりの者です。 on 2012年7月25日 3:52 PM
情報ありがとうございます。
とても助かりました!
感謝感激です。
モバイル版GoogleAnalyticsの導入方法 on 2012年8月20日 9:43 AM
[...] 《お名前.com共用サーバーSDで拡張子.htmlをPHPとして実行する》 Category: 各種設定 2012年8月20日 at 8:00 AM No comments SUKE Leave a Comment or Cancel reply [...]
ずっと悩んでいたものです。 on 2012年10月16日 5:41 PM
ありがとうございました。ほんとうに助かりました!
★ on 2012年11月19日 2:09 PM
ようやく解決できました!感謝です。
本当にありがとうございます。
助かりました^^ on 2013年1月13日 5:02 PM
この情報探してました!
ありがとうございます!
>「サポート外なのでご自分で書籍などでお勉強なさってください」
ありますねー、この対応^^;
サポート外の理由があるんでしょうけど、
お客さんに対して不親切すぎますよね。
うぃさん on 2013年6月27日 10:53 AM
FAQにも情報がなく途方に暮れておりました。
本当に助かりました。
ありがとうございました。
yuki0304 on 2013年7月21日 3:16 PM
混在する通常の.htmlファイルがエラーになってしまったのですが
なにか対策はありますでしょうか?
にわタコ on 2013年7月28日 2:22 PM
申し訳ないですが的確に原因はわからないです。
憶測ですが、通常のHTMLファイルにも
#! /usr/local/bin/php-cgi
を記述していただくことで、解消するかもしれません。
粋な男 on 2013年8月22日 6:02 AM
素晴らしいの一言です。
「サポート外なのでお役に立てません」と言われ、本当に行き詰って困った時だったので感動しました。
ありがとうございました。
matsu on 2013年10月05日 12:35 PM
まったく同じ境遇でしたので、
感動しました。
本当にありがとうございました。
【GMO】お名前.com共有でhtmlファイルをPHPとして動かす方法 - 石崎智展のWEB技術研究所 on 2013年12月03日 1:45 PM
[...] した。 やはり同じようにサポートに冷たくされて調べたようです。 ブログ載せてくださったおかげで助かりましたm( _ _ )m 参考:お名前.com共用サーバーSDで拡張子.htmlをPHPとして実行する [...]
ウナ on 2013年12月12日 4:01 PM
素晴らしすぎます!!
感動しました!!
ぱふお on 2013年12月25日 5:47 PM
下記手順にて作業致しましたが、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
風柳 on 2014年1月03日 12:50 PM
有用な記事をありがとうございます。
ただ、当方の使用している共用サーバSDだと、なぜかこの方法だとうまくいきませんでした(500 Internal Server Errorが発生)。
※なお、*.htmlのshebangを
#! /usr/local/bin/php.cli
に変更すると、一応動作しました。
サーバによって設定が異なるのかもしれませんね。
そこで、別の方法を試したところうまくいったので、記事にしてみました。
http://d.hatena.ne.jp/furyu-tei/20131230/1388396025
ご参考まで。
風柳 on 2014年1月04日 6:04 AM
記事内での補足ありがとうございます。
念のためですが、
#! /usr/local/bin/php.cli
の設定ですが、php.cli は CLI SAPI版のため、CGI SAPI版(php-cgi)と比べると制限があるのでご注意ください。
・HTTPヘッダが出力されない(header()関数等が無効)
・$_GET, $_POST, $_REQUEST などが設定されない、等。
先のコメントにURLで示しました通り、CGI-Wrapperを介して php-cgi を使用する方法の方がベターだと思われます。
にわタコ on 2014年1月04日 4:42 PM
ありがとうございます。
風柳様ご考案のCGI-Wrapperを作成する方法が
Wrapperの作成とhtaccessの記述だけでhtmlファイルのPHPを実行出来るので良さそうですね。
記事中にコメントで頂いたURLへリンクを貼らせていただきます。
どい on 2015年1月23日 4:46 PM
ちょうど同じ悩みにブチあたっていたので、大変助かりました!
お名前.comのサポートよりも親切です(笑)