【发布时间】:2012-12-13 13:16:03
【问题描述】:
这是布局:
web root
- admin (dir)
- index.php
- js
- img
- other files / dirs
- dir
- files
到目前为止,我使用 .htaccess passwd 保护了管理目录,因为我希望对该目录中的所有文件(包括 js 脚本、jpg、pdf 等)进行完全访问控制。另一方面,我的自定义 CMS 使用 PHP 会话/cookie 为其他 URL 提供身份验证。我想要完成的是对 .htaccess 受保护的目录使用相同的 PHP 身份验证,避免弹出已通过 PHP 身份验证用户的用户/密码提示。总结:
- 我希望管理员目录使用 .htaccess 规则进行身份验证
- 如果用户已经使用 PHP 进行了身份验证(以 HTML 表单登录,在未受保护的文件上),则在访问管理目录内容时绕过第二个 .htaccess 身份验证过程
- 如果未经 PHP 身份验证的用户尝试访问管理目录中的内容,则应触发 HTTP 身份验证弹出窗口
我读过的大部分内容都建议将管理目录移到 Web 根目录之外,并使用 readfile 从 PHP 脚本访问文件,我不想这样做。该目录上有动态内容,也有静态内容。我知道 apache 会在加载任何资源之前触发 auth 弹出窗口,所以问题是如何让 apache 知道用户已经通过身份验证。还有其他建议/解决方法吗?
【问题讨论】:
-
使用 php 进行 HTTP 身份验证 > php.net/manual/en/features.http-auth.php > koivi.com/archives/php-http-auth
-
看看这里,你可以只用 PHP 解决这个问题:php.net/manual/en/features.http-auth.php 并且没有 .htaccess 文件。对于 Cookie Stuff,请看这里:askapache.com/htaccess/htaccess-fresh.html#Get_Cookie_Value。在您的用户登录后,会设置一个 cookie。您的 htaccess 文件需要检查该 cookie。这在 php 会话中效果不佳,因为会话 cookie 仅包含会话哈希。