最近,由于没有'明显'的原因,我的登录表单开始重定向到我网站的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);
} ?>
答案 0 :(得分:0)
你可以省略$_SERVER[]
数组并使用静态网址,只是为了调试吗?
喜欢:
<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 以这种方式调试并让我们知道。
答案 1 :(得分:0)
有很多可能的原因。以下是一些故障排除提示:
<?php echo '<form action="http://' . $_SERVER['SERVER_NAME'] . '/login" method="post">'; ?>
显然,填充到表单操作中的URL有问题:
上述代码中的“页面”在您的操作中为login
。它是一个页面,还是一个目录,还是你有重写?该网址应该指向login.php还是login.html,而不仅仅是登录?
当您在浏览器中查看呈现页面的来源时,您在表单的action
中看到了什么?这是一个合法的网址吗?如果您将网址复制/粘贴到浏览器中,您会得到什么?
使用此类表单时,您不仅仅有/login
行动的理由?不应该像这样依赖服务器变量,因为你要使用相同的网址,为什么不删除复杂性,只需使用/login
作为操作?
您使用的是网址重写吗?规则是否已更改,或者是否已修改/移动了htaccess文件?