webサイト、php、CGIについて。

検索サイトなどでフォームにキーワードを入力して検索ボタンを押すと、ブラウザのURL入力欄が「http://xxxxx.xxx/?q=keyword」となるサイトがあります。
通常POSTで受け取ると「http://xxxxx.xxx/」となると思うのですが、それが「http://xxxxx.xxx/?q=keyword」のようになるというのはクエリを受けたCGI(プログラム?)で一度リダイレクトさせているのでしょうか?
それともクエリを受けたCGIでリダイレクトせずにURLの入力欄に「/?q=keyword」という部分を表示させる方法があるのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2006/05/29 14:32:45
  • 終了:2006/05/29 17:13:41

回答(4件)

id:vector_xenon No.1

vector回答回数113ベストアンサー獲得回数42006/05/29 14:50:25

ポイント20pt

POSTではなくGETで渡しているからです。

フォームからでなくとも、URLに?item1=value1&item2=value2とすればGETになります。


<form method="GET">

もしくは

<form action="./?item=value">

<a href="./?item=value">

のような感じです。

id:worldtravel

というようにURLを直接書くのではありません。

例えばこれはGoogleのフォームです。

これにキーワードを入力して検索すると、ブラウザのURL入力欄が「http://www.google.co.jp/search?q=keyword」となりますよね。

(「q」以外は省略しています)

通常はどんなキーワードで検索してもURLの入力欄は「http://www.google.co.jp/search」なるはずです。

しかし、

「あいうえお」と入力して検索すれば「http://www.google.co.jp/search?q=あいうえお」

「かきくけこ」と入力して検索すれば「http://www.google.co.jp/search?q=かきくけこ」

となりますよね。

(エンコードはしていません)

これはリダイレクトをしているのか、それとも何か方法があるのかを知りたいのです。

2006/05/29 15:15:10
id:villain No.2

villain回答回数174ベストアンサー獲得回数122006/05/29 14:50:34

ポイント20pt

例えば、


<form action="xxx?xxxx=xxx" method="POST">~<form>


のようにするとURL欄には「xxx?xxxx=xxx」が表示されます。

この場合は、GETメソッドの情報とPOSTメソッドの情報が両方

送信されます。

(ただし、POSTとGETのどちらかしか処理しない仕様になって

いるとうまく動作しません)


POSTメソッドで送信している情報がGETメソッドのパラメータと

して表示される場合は恐らくはリダイレクトしているんでしょう。

しかし、そのままPOSTメソッドの内容を表示している場合、

POSTメソッドで送信する意味がなくなってしまいます。

(GETメソッドは最大1024byteくらいしか情報を送信できない)

これは仕様上の問題なのでどうしようもありませんね。

id:worldtravel

> POSTメソッドで送信している情報がGETメソッドのパラメータと

> して表示される場合は恐らくはリダイレクトしているんでしょう。

やはりそうなのですよね???

できればどなたか「リダイレクトしかない」または「xxxxxxと言う方法がある」といった確信的な答えを頂けると嬉しいです。

> しかし、そのままPOSTメソッドの内容を表示している場合、

> POSTメソッドで送信する意味がなくなってしまいます。

この件に関してここでは構いません。

2006/05/29 15:20:33
id:vector_xenon No.3

vector回答回数113ベストアンサー獲得回数42006/05/29 15:41:55

ポイント50pt

HTMLの基本の話です。

<form action=/search name=f>

はmethod属性を省略していますよね?

つまりGETでデータを渡しているのです。


GETでデータを渡すとURLのQueryStringの部分、つまり?以降の部分に自動で作成されます。


おそらくキーワードを入力する部分は

<input name="q">

となっているはずです。

これをデータでGETで渡すと

/search?q=xxxx

となります。


なのでリダイレクトでもなく、プログラムでもなくGETでのデータを渡しているだけです。

id:worldtravel

早速試しました。

「あっ ほんとだ。。。」これを知らないとは恥ずかしすぎる...

今まで当たり前のように「method="post"」と書いていたので気付きませんでした。

これが知りたかったのです。

ありがとうございました。

2006/05/29 17:09:30
id:orz66 No.4

orz66回答回数106ベストアンサー獲得回数112006/05/29 16:53:01

ポイント10pt

mod_rewriteにてリダイレクトさせるとブラウザの仕様により

GETになるようです。

mod_rewriteについてはこちらが参考になります。

http://q.hatena.ne.jp/1147926716

id:worldtravel

ありがとうございました。

3番の回答で納得しました。

2006/05/29 17:09:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません