我想将http://models.example.com/*
的所有请求重写为http://models.example.com/handler.php?requested_url=*
然后,handler.php
会检查我的$_SESSION
变量以查看用户是否已登录。如果用户已登录,则handler.php
会重定向到requested_url
如果用户未登录,则handler.php
将使用正则表达式查找requested_url
与一组权限规则(ruleList.php
)之间的匹配项。如果handler.php
发现存在允许未登录用户访问requested_url
的规则,则会重定向到requested_url
,否则会重定向到登录页面。
我的问题是:如何区分初始请求和重定向? (避免无限循环)。我可以附加一个像&already_processed=true
这样的变量,但这是完全不安全的。
我会使用mod_auth,但问题是我希望通过网站的管理面板(ruleList.php
)设置权限。权限规则可能很复杂,设置它们的人不应该在服务器的httpd.conf文件中查找。 mod_auth的另一个问题是更改需要重置服务器。
我很感激有关这个主题的任何意见!
答案 0 :(得分:1)
...会重定向到......
重定向总是不安全的。它会将操作传递回客户端(浏览器),然后结束请求。
这意味着,下一个请求是一个新请求,如果请求是新的,那么Apache和PHP脚本都没有信息,直到您将其添加到会话。
但是,由于您希望apache webserver为资源提供服务,因此您需要在apache中验证会话。这意味着你需要扩展apache,以便你可以检查一些环境变量或类似的重写条件。
你可以想象,这有点复杂。
正如您提到mod_auth,IIRC,您可以查询Mysql数据库。这样做甚至可以验证请求URI。在你的情况下,这可能是一个简单的变种。