http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
mod_rewrite - Apache HTTP Server
前の質問でmod_rewriteについて聞いていませんでした?path_infoを使うくらいなら、以下のmod_rewriteを使ってみませんか。.htaccessに記述してください。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L]
</IfModule>
存在しないファイル/ディレクトリがリクエストされたとき、index.phpをコールします。
http://httpd.apache.org/docs/1.3/mod/mod_actions.html
Module mod_actions
htmlに限定するなら、mod_actionsも使えますね。.htaccessに
Action text/html /index.php
とか書いて、path_infoを見てください。
URLはダミーです(一応,少し関係あるかも)
まず, DirectoryIndex でデフォルトのアクセスファイル名を指定します.
※処理をさせたいファイルが, pathInfo.php なら,
DirectoryIndex pathInfo.php
これで, http://exam.su-jine.com/path/info.htmlが リクエストされた際には,
(http://exam.su-jine.com/path というディレクトリ/ファイルがなければ)
$_SERVER['PATH_INFO']に /path/info.html がセットされて,
http://exam.su-jine.com/pathInfo.php が呼ばれます.
※ちなみに,仮に http://exam.su-jine.com/path.php というファイルがある場合,
$_SERVER['PATH_INFO']は /info.html がセットされて,
http://exam.su-jine.com/path.php が呼ばれます.
なお,リンク先はサーバ上のファイル(path_info.php)に拡張子をつけず,
個別にそのファイルのファイルタイプを指定することで処理していますが,
そんなメンドウなこと(処理させるファイル名を全てについて AddType ...(略)... が必要)をしなくても
Options +Multiviews
を指定すれば,拡張子なしのリクエストに適当な拡張子のファイルを返すので,
環境と状況によればこちらの方が簡単です.
前半部分は理解できたと思います。ありがとうございました。さくらインターネットを使用しているので、Optionsは使えないようです。すぐに取り掛かれないのですが、ご指摘の方法で実現可能かどうか、試してみたいと思います。
http://japache.infoscience.co.jp/rewriteguide/
Apache URL Rewriting Guide
参照されているページの方法は、
path_info
というphpスクリプトが見かけのURIにも必要だが、
それをなくし、ルートから直接のパスに見せかけたい、
と言うことでしょうか。
それならば、いずれにしてもmod_rewriteを使ったほうが良いと思います。
もし、
*問答無用で全てのリクエストを*
http://example.com/path/info.html
という見かけのURIで、
http://example.com/path_info.php/path/info.html
という実アクセスとして扱いたければ、
RewriteRule ^(.*)$ index.php$1
などとし、PATH_INFOを見るのが良いかと。
でも、本当に全てのリクエストに対してプレフィクスをつけてしまいますので、
必要なら、ルールを付け加える必要があります。
「path_infoというphpスクリプトが見かけのURIにも必要だが、それをなくし、ルートから直接のパスに見せかけたい」です。その通りです。「もし〜」以下は申し訳ないのですが、意味が分かりませんでした。
じゃ、これで。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.+)/(.+)¥.html$ path_info.php?var1=$1&var2=$2 [L]
</IfModule>
http://exam.su-jine.com/path_info/path/info.html と呼ぶと、 http://exam.su-jine.com/path_info.php?var1=path&var2=info に変換してリクエストが渡されます。
しかしながら、フォルダ階層が2つ、3つと様々なリクエストには対応できません。あとは結局php側で振り分けることになるでしょう。あとはご自分で考えられてはいかがでしょうか?
しかし、あなたが参考にしているページも、php側でpath_infoを分解しているだけなんだから、私の1回目の回答の$_GET[’q’]をphpで分解すればいいだけですよ。
ちなみに、mod_actionsは、存在しないディレクトリには効果が有りませんでした、だから今回の例では使えません。見なかったことにしてください。失礼しました。
rewriteルールが指定した結果にならないものです(/path_info/も消えていませんし、$1,$2の配置も違います)。
---
最終的に、同時に質問として出していたmod_rewriteを使用する方法で解決しました。
http://www.hatena.ne.jp/1122115909
ご回答頂いた皆様、有難うございました。
そのwriteルールだと、希望の動作はしないと思うのですが。。q=とか、そういうんじゃないです。mod_actionsは全く知らないものだったので、他の方法が駄目だったら調べてみたいと思います。