2012-11-24 32 views
0

最近,由於沒有「明顯」的原因,我的登錄表格開始重定向到我的網站的404頁面,而我在任何地方都看不到原因。Html表單似乎正在提交到錯誤的地方?

<?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> 

然而,由於某些原因,它仍然重定向到404頁,當<?php echo'http://' . $_SERVER['SERVER_NAME'] . '/login是完全相同的頁面。除了用戶成功登錄之外,沒有其他重定向,它會轉到不同的頁面。我只是沒有看到是什麼造成了這個問題,其他人能解決這個問題的原因嗎?

編輯: 我的.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); 
} ?> 
+1

你最近修改了.htaccess文件中的任何重寫文件嗎? – Oldskool

+2

請更具體! 當頁面顯示源代碼中顯示的內容時,您還可以編寫結果嗎? –

+0

您應該使用HTTP_HOST而不是SERVER_NAME。看到這個http://stackoverflow.com/questions/2297403/http-host-vs-server-name – Popnoodles

回答

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 調試這種方式,讓我們知道。

+0

提交沒有做任何事情,但是當我嘗試使用你的SERVER_SELF時,它只是提交一切到http:// login/ – ChocCookieRaider

+0

那麼向我們展示登錄驗證代碼,它可能是問題所在。 – 2012-11-24 21:20:11

+0

將驗證碼添加到原始問題中。 – ChocCookieRaider

0

有很多可能的原因。下面是一些故障排除提示:

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

顯然有些不妥與同時被填充到表單的動作的網址:代碼

  1. 「頁面」上面是你的行動login 。它是一個頁面還是一個目錄,或者您是否重寫? url應該指向login.php還是login.html而不是僅僅登錄?

  2. 當您在瀏覽器中查看呈現的頁面的源,你是什麼形式的action看到了什麼?這是一個合法的網址嗎?如果您將網址複製/粘貼到瀏覽器中,您會得到什麼?

  3. 當使用這樣的表格時,任何你不會採取行動的原因是/login?不應該像這樣依賴服務器變量,並且由於您要使用相同的網址,爲什麼不移除複雜性,只需要使用/login作爲操作?

  4. 您是否使用網址重寫?是否修改了規則,或者修改了/移動了htaccess文件?

+0

With 1.實際頁面位於名爲pages的目錄中,但文件名爲login.html,這也與4.m綁定,因爲當你進入/ login時,.htaccess會將其重寫爲index.php?page =登錄然後包括登錄頁面以及頁眉和頁腳。將操作更改爲/登錄仍然具有與404頁面相同的效果。而在瀏覽器中,它是一個合法的網址,轉到同一頁面。 – ChocCookieRaider