人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

path_infoを用いて動的URLを静的URLに変換する作業を検討中です。下記サイトに「http://exam.su-jine.com/path_info.php?var1=path&var2=info を http://exam.su-jine.com/path_info/path/info.html という URI に」する方法が掲載されているのですが、「http://exam.su-jine.com/path/info.html 」とするにはどうしたら良いのでしょうか?

http://blog.su-jine.net/archives/2004/08/_path_info.html

●質問者: dak
●カテゴリ:コンピュータ
✍キーワード:URI URL サイト 検討中
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● ito-yu
●10ポイント

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を見てください。

◎質問者からの返答

そのwriteルールだと、希望の動作はしないと思うのですが。。q=とか、そういうんじゃないです。mod_actionsは全く知らないものだったので、他の方法が駄目だったら調べてみたいと思います。


2 ● szkn
●25ポイント

http://d.hatena.ne.jp/szkn/20041217#p1

szknの日記

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は使えないようです。すぐに取り掛かれないのですが、ご指摘の方法で実現可能かどうか、試してみたいと思います。


3 ● HackySS
●25ポイント

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にも必要だが、それをなくし、ルートから直接のパスに見せかけたい」です。その通りです。「もし〜」以下は申し訳ないのですが、意味が分かりませんでした。


4 ● ito-yu
●10ポイント

http://google.com/

Google

じゃ、これで。

<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

ご回答頂いた皆様、有難うございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ