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

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

●質問者: worldtravel
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CGI keyword PHP URL webサイト
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● vector
●20ポイント

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

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


<form method="GET">

もしくは

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

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

のような感じです。

◎質問者からの返答

というように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=かきくけこ」

となりますよね。

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

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


2 ● villain
●20ポイント

例えば、


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


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

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

送信されます。

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

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


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

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

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

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

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

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

◎質問者からの返答

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

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

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

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

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

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

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


3 ● vector
●50ポイント

HTMLの基本の話です。

<form action=/search name=f>

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

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


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


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

<input name="q">

となっているはずです。

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

/search?q=xxxx

となります。


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

◎質問者からの返答

早速試しました。

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

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

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

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


4 ● orz66
●10ポイント

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

GETになるようです。

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

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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●


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