使用 Apache 的 SetHandler 强制所有内容请求通过 PHP 身份验证脚本(Apache 2.2.15、PHP 5.3.3)时,我遇到了无限循环问题。
我的目标是让 PHP 身份验证包装器验证尝试访问站点内任何内容的用户。因此,任何对 /securesite/securefile.html 或 /securesite/securefile.png(例如)的请求都将在包装器重定向到目标文件之前通过 PHP 包装器发送。
这是 Apache 配置:
DocumentRoot /data/www/default
Action VerifyAuth /_auth/authenticate_test.php
<Directory "/data/www/default/securesite">
SetHandler VerifyAuth
Order allow,deny
Allow from all
</Directory>
在 /data/www/default/_auth 中测试身份验证 PHP 脚本):
<?php
header("Location: ".$_SERVER['REQUEST_URI']);
exit;
?>
测试目标文件是一个简单的 html 文件(/securesite/securefile.html):
<html><body>index.html</body></html>
实际的身份验证脚本有更多的深度,但我在进行故障排除时试图将这个问题分解为最简单的形式。
我尝试使用“php_value auto_prepend_file /data/www/default/_auth/authenticate_test.php”,但这在刷新站点内的页面时会产生问题。
使用这种方法会创建一个循环,浏览器会出错。Apache 访问日志将重定向到目标页面的尝试显示为“GET /securesite/securefile.html HTTP/1.1 302”。
关于导致此循环的原因以及修复方法的任何想法?谢谢。
更新:我相信我已经解决了这个问题(至少部分),方法是删除强制重定向到预期页面的标题行,而只是“要求”预期的内容。
<?php
require($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']);
exit;
?>
当充当各种内容(例如 SVN 站点)的包装器时,我需要测试这样做的含义……我现在要做其中的一些。