【问题标题】:Apache SetHandler PHP script redirect loopApache SetHandler PHP 脚本重定向循环
【发布时间】:2013-08-29 15:27:16
【问题描述】:

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

【问题讨论】:

    标签: php apache redirect infinite-loop handlers


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      if (function_exists('ranAlready')) { 
          exit;
      }
      else {
          function ranAlready() {
              ;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 2016-12-16
        • 1970-01-01
        • 2015-03-21
        相关资源
        最近更新 更多