我正在尝试使用 mod_auth_form 使用文档中描述的模式作为“Inline Login with Body Preservation”。在文档中,他们提到使用 mod_include 或 CGI 作为 ErrorDocument 以生成登录表单,例如:
错误文档 401 /cgi-bin/login.cgi
这种情况是,如果用户想要从未经身份验证的页面或从具有超时会话的经过身份验证的页面进行 POST。
POST 命中目标 url,被 mod_auth_form 拦截,调用 ErrorDocument 401,用户输入凭据。在登录表单页面上,可以添加“特殊”隐藏表单变量 httpd_body(和 httpd_method),该变量将由身份验证处理程序处理以创建原始目标的 POST 正文。
问题是 login.cgi 没有得到 POST 数据,因为(显然)apache 没有将 POST 数据传递给 ErrorDocument。ErrorDocument 的替代方法是使用指令 AuthFormLoginRequiredLocation 但这会执行普通的 302 重定向,当然 POST 数据会丢失。
似乎无法使用 httpd_body 的功能,因为无法捕获原始 POST 数据。即使在 GET 的情况下,也必须解析引用者以获取 GET 变量。
在运行身份验证挂钩之前,Apache 中有没有办法读取 POST 数据并将其存储在某处?还是我错过了其他一些解决方案?