所以我在 html/php 中有一个非常简单的登录表单
登录1.php
<?php include('settings.php'); ?>
<!DOCTYPE html>
<html>
<head>
<title>login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form id="form1" name="form1" method="post" action="<?=$basehttp;?>/login_auth1.php">
<input name="ahd_username" type="text" id="ahd_username" size="35" maxlength="255" />
<input name="ahd_password" type="password" id="ahd_password" size="35" maxlength="35" />
<input type="submit" name="Submit" value="Login" />
</form>
</body>
</html>
login_auth1.php
<?php
include('settings.php');
print_r($_POST);
print_r(getallheaders());
if(isset($_POST['ahd_username']) && isset($_POST['ahd_password'])){
//database queries and stuff, send user elsewhere if login correct
}
?>
<!DOCTYPE html>
<html>
<head>
<title>login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form id="form1" name="form1" method="post" action="<?=$basehttp;?>/login_auth1.php">
<input name="ahd_username" type="text" id="ahd_username" size="35" maxlength="255" />
<input name="ahd_password" type="password" id="ahd_password" size="35" maxlength="35" />
<input type="submit" name="Submit" value="Login" />
</form>
</body>
</html>
当运行 login1.php(在某些)Web 浏览器中时,login_auth1.php 中的 POST 将为空。但是当再次从 login_auth1.php 提交完全相同的表单时,它工作得很好。这个错误的原因可能是什么?如何进一步调试?仅供参考服务器正在运行Varnish。
可以在此文本文件中找到带有某些调用标题的输出链接。
编辑: 现在我头上没有头发了,但我想出了一种“有效”的方法。如果我将我的登录文件合并到一个文件中,将该文件放入单独的文件夹 /login 中,完全删除操作标记中的 url(因此它将是 action="")并将 Varnish 配置为
if (req.url ~ "/login"){
set req.backend = mybackend;
return (pass);
}
它会起作用的。这感觉像是一个非常糟糕的“解决方案”,尤其是在操作标签中删除字符串的部分,但这是我让它工作的唯一方法。我尝试了很多不同的 Varnish 配置,包括返回(管道)。有谁知道如何让它正常工作?或者为什么上面这个奇怪的版本有效?