2008年2月13日

[Apache-Users 6977] Re:GET とPOSTの混在など関連質問4点(大きく分けて2点)

** Apache ユーザーズメーリングリスト **
** 注意:このメールへの返信は Apache-Users へ行きます **

川井です。

メソッドという意味では、アクセスログを見るのが簡単です。

POST /example.php?foo=bar HTTP/1.1

とか
GET /example.php?foo=bar HTTP/1.1
とか出てると思いますが、これが POST か GET かの違いです。
# HTTP の method なので、RFC2616

$_GET 変数があるから、それは GET method だった、ということは
ありません。$_SERVER['REQUEST_METHOD'] の値が
GET かどうかで判断します。

ところで、GET メソッドか POST メソッドかという話とは、全然関係なく、
URL の query string 部分に含まれているパラメータは $_GET で
取得できます。ややこしいですけれども。


> ** Apache ユーザーズメーリングリスト **
> ** 注意:このメールへの返信は Apache-Users へ行きます **
>
> 質問者のだいすけです。
> 佐久間様、ご返答ありがとうございます。
>
> Hiroaki Sakuma さんは書きました
> >> (1)
> >>
> >> <form method="post" action="example.php?foo=bar">
> >> <input type="text" size="10" name="hoge" />
> >> <input type="submit" name="submit" value="送信" />
> >> </form>
> >>
> >> のように、POSTとGETが混じったようなformというのは・・・
> >>
> >> ##########
> >>
> >> (1−1)RFCなど公的には認められているのでしょうか?
> > 上記のリクエストは,POSTメソッドであり,GETメソッドではありません.
> > 混在していませんから,単なるPOSTメソッドであり,何の問題もありません.
> 私のご説明が稚拙だったかもしれません。失礼しました。
>
> 「method="post"」をみると、POSTメソッドに見えますが、
> 「action="example.php?foo=bar"」だけを見るとGETメソッドだと思いました。
> (「<a href="example.php?foo=bar">アンカー</a>」をクリックしたときは、
> GETメソッドですので。)
>
> そこで、混在しているのでは?と思った次第です。
>
> また、佐久間様が下の(1−2)へご返信してくださったように、
> $_GET["foo"] の値がbarであり、 $_POST["foo"]は未定義であるため、
> GETメソッドかも?といまだ混乱しています。
>
> 私が、「メソッド」について、きちんと理解していないかもしれません。
> >> (1−2)(1−1)の答えに関わらず、
> >>  こういった書き方で、Linux/BSD & Apache & PHP において、何かしら問題と
> >> なったり、
> >>  (私の環境では特に問題なかったのですが・・・)
> >>  環境により挙動が異なることはありうるのでしょうか?
> >
> > 上記を PHP から見た場合,
> >
> > $_POST => array(
> > hoge => "piyo",
> > submit => "送信",
> > );
> >
> > $_GET => array(
> > foo => "bar",
> > );
> >
> > となります.hoge,submit,foo とも変数として普通に取り扱えます.
> ほっとしました。
>
> とはいえ、前述の疑問が残ります。
> ただ、PHPなら「$_REQUEST」で「$_GET」と「$_POST」の両方とも拾えるので、
> それですませば問題ないとは思われますが。
> (単純にそれだけだと、セキュリティ的に劣りますが)
>
> >> (2)
> >> ●「www.example.com」と「example.com」でVirtualHostを設定し、
> >> (それぞれのドキュメントルートは異なるものとします)
> >>
> >> ●「www.example.com」のドキュメントルートに、.htaccess を設置し、
> >>
> >> ●そこに、
> >> ErrorDocument 404 /404.php
> >> と書いて、
> >>
> >> ●404.phpの中では
> >>
> >> <?php
> >>
> >> //文字列「www.example.com」を代入
> >> $subject = $_SERVER["HTTP_HOST"];
> >>
> >> //文字列「example.com」を得る
> >> $pattern = '/[^.]+\.[^.]+$/';
> >> preg_match($pattern, $subject, $matches);
> >> $domain_name = $matches[0];
> >>
> >>
> >> //301 Moved Permanently
> >> //$_SERVER["REQUEST_URI"] はたとえば "/p.php?a=hoge"
> >> header("Location: http://" . $domain_name .
> >> $_SERVER["REQUEST_URI"],TRUE,301);
> >> exit;
> >>
> >> ?>
> >> と書いたとします。
> >> (要は「www.」をなくしたURLに301ステータスコードでリダイレクトさせたい。
> >>  で、「www.」以外は、クエリーストリングスも含めてすべてひきつぐ。)
> >
> > こんなまわりくどいことをしなくても,mod_rewrite で,
> >
> >
> > RewriteEngine On
> > RewriteCond %{HTTP_HOST} !^example\.com$
> > RewriteRule ^(.*)$ http://example.com$1 [R,L]
> >
> > 以上で要件は満たします.
> あ・・・すみません。おっしゃる通りですね。
> example.com以外でも通じるように、との意識がいつのまにか働いて、こんな書
> き方をしていました。
> example.com決めうちなら、これで一発ですね。
>
> #と、思いつつ、mod_rewriteを使って、
> #ドメインが何であっても通じるような汎用的な書き方がもしございましたら、
> #後学のために教えていただければ幸いです。
> #自分でもいろいろ調べたり試しましたが、わかりませんでした。
>
> 以上、よろしくお願い申し上げます。
> --
> 入退会・変更・配送一時停止は以下へ
> http://mm.apache.jp/mailman/listinfo/apache-users

--
入退会・変更・配送一時停止は以下へ
http://mm.apache.jp/mailman/listinfo/apache-users

投稿者 xml-rpc : 2008年2月13日 16:59
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/69850
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。