0

最近、「明らかな」理由もなく、ログイン フォームが Web サイトの 404 ページにリダイレクトされるようになりましたが、原因がどこにもわかりません。

 <?php echo '<form action="http://' . $_SERVER['SERVER_NAME'] . '/login" method="post">'; ?>
 <li><input type="text" name="username" placeholder="Username"></li>
 <li><input type="password" name="password" placeholder="Password"></li>
 <li><input type="submit" value="Login"></li>
 </form>

それでも、何らかの理由で<?php echo'http://' . $_SERVER['SERVER_NAME'] . '/login、まったく同じページである場合でも、404 ページにリダイレクトされます。ユーザーが正常にログインした場合を除いて、別のページに移動する他のリダイレクトはありません。何が原因なのかわからないのですが、他の誰かが原因を突き止めることができますか?

編集:私の .htaccess は

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?page=$1

認証コード:

<?php
if(empty($_POST) === false) {
   $username = $_POST['username'];
   $password = $_POST['password'];

   if(empty($username) === true || empty($password) === true) {
      $errors[] = 'You need to enter a username and password.';
   } else if (user_exists($username) === false) {
      $errors[] = 'We can\'t find that username. Have you registered?';
   } else if (user_active($username) === false) {
      $errors[] = 'You haven\'t activated your account!';
   } else if(strlen($password) > 32 ) {
        $errors[] = 'Password to long.';
   }
     $login = login($username, $password);
     if($login === false){
       $errors[] = 'That username/password combination is incorrect.';
     }else{
        $_SESSION['user_id'] = $login;
        header('Location: ' . $_SERVER['SERVER_NAME'] . '/?msg=1');
        exit();

     }
   }
if(empty($errors)===false){
?>
    <h1>We tried to log you in, but....</h1>
<?php
     print_r($errors);
} ?>
4

2 に答える 2

0

$_SERVER[]デバッグのためだけに、配列を省略して静的 URL を使用できますか? お気に入り:

<form method="POST" action="url.php">
<li><input type="text" name="username" placeholder="Username"></li>
<li><input type="password" name="password" placeholder="Password"></li>
<li><input type="submit" value="Login" name="submit"></li>
</form>

と:

 header('Location: url.php?msg=1');

404 エラーが表示される場合は、これまたは .htaccess からのエラーである必要があります。この方法でデバッグして、お知らせください。

于 2012-11-24T21:06:48.453 に答える
0

考えられる理由はたくさんあります。トラブルシューティングのヒントを次に示します。

<?php echo '<form action="http://' . $_SERVER['SERVER_NAME'] . '/login" method="post">'; ?>

明らかに、フォームのアクションに入力されている URL に何か問題があります。

  1. 上記のコードの「ページ」はloginアクションにあります。それはページですか、ディレクトリですか、それとも書き換えがありますか? URL は、単にログインするのではなく、login.php または login.html を指す必要がありますか?

  2. ブラウザでレンダリングされたページのソースを表示するactionと、フォームに何が表示されますか? 正規のURLですか?URL をコピーしてブラウザに貼り付けると、何が得られますか?

  3. このようなフォームを使用する場合、アクションを/login. このようにサーバー変数に依存するべきではありません。また、同じ URL にアクセスするので、複雑さを取り除き、/loginアクションとしてそのまま使用してみませんか?

  4. URL書き換えを使用していますか?ルールが変更されたか、htaccess ファイルが変更または移動されましたか?

于 2012-11-24T21:09:54.327 に答える