我正在尝试使用mod_auth_form,使用文档中描述的模式“使用Body Preservation进行内联登录”。在文档中,他们提到使用mod_include或CGI作为ErrorDocument来生成登录表单,例如:
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数据并将其存储在某处?还是我错过了其他一些解决方案?