You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地localhost部署的登录系统提交时返回HTTP 405方法不允许错误

405错误核心原因
  • Apache配置禁用了POST请求:httpd.conf、虚拟主机配置或项目目录下的.htaccess文件存在Limit类规则,直接禁止了POST方法,或错误的重写规则将POST请求重定向为GET请求。
  • PHP模块未正确启用:Apache未将.php后缀的请求交给PHP模块处理,将authenticate.php识别为静态资源,静态资源默认不允许POST请求,直接返回405。
  • 路径/访问方式错误:authenticate.php文件名拼写、大小写不匹配,或你通过file://协议直接打开本地HTML文件提交请求,未走Apache的HTTP服务。
可行解决方案
  • 校验访问方式:确认你是通过http://localhost/你的项目路径/表单页面.html的方式访问登录页,不要直接双击打开本地HTML文件走file://协议。
  • 检查.htaccess规则:备份项目根目录下的.htaccess文件后将其删除,重新提交表单测试,排查是否是重写规则限制了POST方法。
  • 校验Apache配置:打开XAMPP控制面板,点击Apache对应的「Config」按钮,选择httpd.conf:
    1. 搜索LoadModule php_module,确认该行开头没有#注释,PHP模块已启用
    2. 搜索对应htdocs目录的<Directory>配置段,确认没有<Limit POST>类的禁用规则,且配置了AllowOverride All
  • 验证PHP解析能力:在项目目录下新建test_post.php,写入以下代码:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    echo "POST请求正常处理";
} else {
    echo "当前请求方法:".$_SERVER['REQUEST_METHOD'];
}
?>

新建测试表单提交到该文件,若仍返回405,直接重置XAMPP为默认配置即可解决。

  • 修复代码隐藏问题:当前PHP代码存在SQL执行失败后调用空对象的逻辑漏洞,不会导致405但会引发500错误,可按如下修改:
<?php
session_start();
$DATABASE_HOST = 'localhost';
$DATABASE_USER = 'root';
$DATABASE_PASS = '';
$DATABASE_NAME = 'users';
$conn = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
if ( mysqli_connect_errno() ) {
    exit('Failed to connect to MySQL: ' . mysqli_connect_error());
}
if ( !isset($_POST['username'], $_POST['password']) ) {
    exit('Please fill both the username and password fields!');
}
if ($stmt = $conn->prepare('SELECT id, password FROM accounts WHERE username = ?')){
    $stmt->bind_param('s', $_POST['username']);
    $stmt->execute();
    $stmt->store_result();
    if ($stmt->num_rows > 0) {
        $stmt->bind_result($id, $password);
        $stmt->fetch();
        if (password_verify($_POST['password'], $password)) {
            session_regenerate_id();
            $_SESSION['loggedin'] = TRUE;
            $_SESSION['name'] = $_POST['username'];
            $_SESSION['id'] = $id;
            header('Location: home.php');
            exit;
        } else {
            echo 'Incorrect password!.';
        }
    } else {
        echo 'Incorrect username and/or password!';
    }
    $stmt->close();
} else {
    exit('SQL执行错误:'.$conn->error);
}
?>

内容的提问来源于stack exchange,提问作者Ric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:15:02