[PHP-users 3582] Re: ネットスケープでLocation が変なところに飛んでしまう。

松島 知弘 php-users@php.gr.jp
Thu, 15 Nov 2001 18:14:07 +0900


松島です。

Netscape 6.0 では、相対URIで動かないのが仕様だったと思います。
(その後のバージョンからは動作はしていたと記憶しています)

> header(Location : login.php);

誰も突っ込まないようですが、そもそも文法エラーです。
文字列なら、引用符か二重引用符で囲みましょう。


>  トップHTMLでユーザIDとPWを入力させ、login.phpで認証しようとしているのですが、
> submitでlogin.phpに送ろうとすると「www.login.phpが表示されません」というメッ
> セージがでてしまいます。

どのような手順になっているのか分かりません。

この説明からは、フォームに <form action="login.php"> と記述して
それで login.php に飛ばない、と読み取れるのですが、
そうなるとLocationが不要になり、質問に矛盾します。

無理にLocationが必要になる手順を想定すると、
次の図のような手順になるのでしょうか……。
(今度は「submitでlogin.phpに送る」に矛盾しますが)

━━━━━━┳━━━━━┳━━━━━━━━
 ブラウザ ┃ (通信) ┃  サーバ
━━━━━━╋━━━━━╋━━━━━━━━
┌フォーム┐┃     ┃        
│  の  │┃     ┃        
└ HTML ┘→submitする→┌ フォームの ┐
      ┃     ┃│action要素で│(どこか)
┌Location┐← Location ←└指定したURL ┘
│に従い再│┃     ┃        
└取得する┘→ GETする →┌ Locationで ┐
      ┃     ┃│ 指示された │(login.php)
┌Location┐←←←←←←←└  URL   ┘
│ のURLの│┃     ┃        
└ 内容 ┘┃     ┃        
━━━━━━┻━━━━━┻━━━━━━━━


> それに、何も書いていないようなPHPでテストをしてみる

「何も書いていないようなPHP」とは、一体何なのでしょうか。

<?php ?> のようなファイルですか?
それとも、拡張子がPHPの0バイトのファイルですか?

他人に意味が伝わる書き方をして下さい。


> もう少し現象を切り分けてみてはいかがでしょうか。

header('Location: login.php');   // 相対URI 1 (カレント)
header('Location: ./login.php'); // 相対URI 2 (相対パス)
header('Location: /login.php');  // 相対URI 3 (絶対パス)
header('Location: http://www.example.com/login.php'); // 絶対URI

こんな感じで。それぞれ、上手くいくかどうか試してみましょう。


──────────────────────────────
松島 知弘 matsushima@popup.org
          http://www.popup.org/ai/