拡張子htmlのファイルをphpとして扱いたい場合、.htaccessで制御していますが、
サーバによって記述内容が違っています。
どんな内容にすれば良いかは、どこを見て判断すれば良いでしょうか?
例えば、共有のレンタルサーバだと下記で動いたりしますが、
何の差なのか教えてください。
--------------------
Action myphp-script /myphp/php.cgi
AddHandler myphp-script .php .html
--------------------
AddType text/x-server-parsed-html .html
AddType application/x-httpd-php .html
--------------------
ApacheやPHPの設定ファイルでそれを許可しているか否かではないでしょうか。ローカル環境でしたらhttpd.confを確認してみてください。レンタルサーバの場合はマスターに確認をとってください。
この件にかかわらず、環境によって書き方が変わるのは、むしろ当たり前のことだと思います。
しかし、もしあなたがPHPを静的ファイルとして表示させるためにそのような記法をとっているのでしたら、やめた方が無難だと思います。mod_rewriteが一般的です。なぜなら第一に危険であり、そしてすべてのhtmlファイルがスクリプトとして扱われるため、サーバに対する負荷が高いからです。
たとえば、ファイルアップローダなどが設置されている場合、悪意のあるPHPコードを含んだ.htmlファイルがアップロードされたら、サーバが直接攻撃されてしまうでしょう(もちろん、あなたがそれらのすべての攻撃手法を熟知していて、それに対応したPHPコードを書かれているのでしたらまったくの蛇足ですが)。
.htaccessのActionという表記は指定したタイプのファイルがリクエストされたときにCGIスクリプトを実行させます。
AddTypeは拡張子に対してMIMEタイプ(どういうファイルなのかの定義)を追加します。
質問の例ですと
Action myphp-script /myphp/php.cgi
AddHandler myphp-script .php .html
という記述をした場合、.phpと.htmlで終わるファイルをmyphp-scriptという種類とします。
myphp-scriptという種類のファイルにアクセスがあったら /myphp/php.cgiで処理しなさい。
という感じの流れになります。つまり、.phpと.htmlは /myphp/php.cgiで処理されます。
AddType text/x-server-parsed-html .html
AddType application/x-httpd-php .html
という記述の場合、.htmlで終わるファイルをx-server-parsed-html(SSIファイル)と
x-httpd-php(PHPファイル)というMIMEタイプにしなさいという意味になります。
x-httpd-phpで定義した場合、PHPはPHPモジュール(mod_php)として動作します。
http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/mime.html
具体的な違いという点ですと、PHPファイルがどこで処理されるのか(Apacheが処理、php.cgiが処理)の違いだと思います。
回答ありがとうございます、とても勉強になります。
もう1点知りたいのは、
既に構築済みのサーバやレンタルサーバで.htaccessを利用する場合、
みなさんがどこを見て.htaccessの記述内容を決めているか。という点です
当てずっぽうで書いている人が多いように思うのですが、
このファイルを解析して決める。といった確定した情報があるのでしょうか?
曖昧な情報でも全然構いませんので、回答いただけると大変助かります。
smart007さんが2007-07-01 08:45:39に返答いただいたもう1点についての内容です。
専用サーバーやVPS(仮想専用サーバー)ですと、root(管理者)権限がもらえる場合もありますので、
httpd.conf(またはaccess.conf)のAllowOverride設定を書き換えることで
.htaccessで設定できる機能を選ぶことができるようです。
root権限のもらえないレンタルサーバーについては、
BASIC認証・オリジナルのエラーページ表示・リダイレクト程度は.htaccessが許可されていれば使えるだろうと判断して設定しています。
<Files>ディレクティブ等は使えない場所もありますので、使う必要のある場合はFAQで確認や、サポートにメールで問い合わせを行っています。
あくまで、私個人でのやり方ですが・・・
結論としましては、httpd.confというファイルにアクセスする権限がなければ実際の設定は見ることが出来ませんので、
サポートに問い合わせるしかサーバーの仕様は確かめられないと思われます。
httpd.confによる.htaccessの制限について見やすい解説ページを見つけましたのでよろしければどうぞ。
http://document.othersight.jp/notes/website/htaccess.html
ページ真ん中くらいの[より詳しく - 上級ユーザ向けの解説]という項目に載っています。
.htaccessが使えるか否かではなく、使える場合の記述に関しての質問です。
hblmさんが「むしろ当たり前」と考えている箇所を突き詰めてみてください。
Apacheのconf設定によって変わるのか、
インスコしたモジュールによって変わるのか、
バージョンによるのか、
カーネルによるのか、
そういう質問です。