0

使用 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 站点)的包装器时,我需要测试这样做的含义……我现在要做其中的一些。

4

2 回答 2

0

更新:我相信我已经解决了这个问题(至少部分),方法是删除强制重定向到预期页面的标题行,而只是“要求”预期的内容。

于 2013-09-19T18:47:01.920 回答
0

把它放在你的前置文件的顶部

if (function_exists('ranAlready')) { 
    exit;
}
else {
    function ranAlready() {
        ;
    }
}
于 2017-02-08T17:28:45.663 回答