http://www.matome.jp/keyword/hoge
ってなりますよね。
http://www.matome.jp/keyword?q=hoge
なら解るのですが、/hogeはどのようにして動作しているのでしょうか?
誰かご存知の方、よろしくお願いします。
まとめ検索
http://www.matome.jp/
.htaccessにてmod_rewriteを使用すればご掲示のサイトと同様の動作をさせることができます。
具体的な記述につきましては個々のサイトによってちがいますので、ご掲示のサイトがどのような設定をしているかはわかりません。
一例として以下のように設定しhttp://example.com/に設置しhttp://example.com/hogeにアクセスすると、
http://example.com/keyword.php?q=hogeと同じ動作をします。
-------------------------------------------------
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([0-9A-Za-z]+)$ keyword.php?q=$1 [L]
-------------------------------------------------
送られてきたURLをサーバ側でどう解釈するかという問題なので、サーバ側の設定次第です。
例えばApacheでは、mod_rewriteというモジュールの設定をすることで、
http://www.matome.jp/keyword/hoge
を
http://www.matome.jp/keyword?q=hoge
と同等なものだとサーバが解釈してからCGIに処理を渡すような設定ができます。
ありがとうございます。
http://mm.apache.jp/pipermail/apache-users/2004-March/003911.htm...
[Apache-Users 3721] Re: GET で動的ページに ? 以外で引数を渡す方法
要するにこう言うことのようです。
http://www.nilab.info/docs/cgi/draft-coar-cgi-v11-03-clean-jp.ht...
Common Gateway Interface - 1.1 *Draft 03* ($BK.Lu(B)
元々の意図としては、CGIスクリプトの設置されているサーバー内のどこかのPathを渡すためのもののようですが。
http://hoohoo.ncsa.uiuc.edu/cgi/env.html
CGI Environment Variables
で、ここがCGIの規格の環境変数の辺り。
ありがとうございます!
perlで確認したところ、確かにPATH_INFOの中に値が入ってました。
規格もじっくり読んでみます。
HTTP 環境変数の『PATH_INFO』というものを利用して実現できます。
http://hotwired.goo.ne.jp/webmonkey/2000/10/index2a_page6.html
Hotwiredからのお知らせ : Hotwired
アクセスされた URL がどのように変数として分解されるのかはこんな感じです。
こんな風に変更すれば大抵のスクリプトは PATH_INFO 利用での動作が可能になります。
詳しい解説のページを教えていただき、ありがとうございます。
http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/mime.html#S...
$B%_%1%M%3$N(B htaccess $B%j%U%!%l%s%9(B
keywordというファイルがCGIです。環境変数PATH_INFOに/hogeと入っているので、それを元に処理すればOK。
特定のファイルをCGIと認識させるには、.htaccessで
<Files keyword>
SetHandler cgi-script
</Files>
のようにします。
また、/keyword/hoge/?m=detail などとなっていた場合は、?より後はQUERY_STRINGに入ります。
ありがとうございます。
keywordの方にも工夫が必要ですよね。
http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html
mod_rewrite - Apache HTTP Server
apacheにはmod_rewriteというモジュールがあり、これはリクエストされたURLを正規表現によってサーバ内部で書き換える機能を提供します(リダイレクトもできます)。
mod_rewriteは、例の場合「keyword/hoge」という文字列を受け取り、たとえばkeyword.php?q=hogeに書き換えて処理しているかもしれません。もっと単純に、index.php?q=keyword/hogeとしているかも?
ありがとうございます。
どうやら、2通りの方法があるようですね。
勉強になりました。
みなさん、ありがとうございました。
ありがとうございます。
なるほどー、そういうApacheのモジュールがあるのですね。
調べてみます。