mod_rewrite到会话控件“handler.php”?

时间:2012-09-23 21:08:33

标签: php apache session mod-rewrite mod-auth

我想将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的另一个问题是更改需要重置服务器。

我很感激有关这个主题的任何意见!

1 个答案:

答案 0 :(得分:1)

  

...会重定向到......

重定向总是不安全的。它会将操作传递回客户端(浏览器),然后结束请求。

这意味着,下一个请求是一个新请求,如果请求是新的,那么Apache和PHP脚本都没有信息,直到您将其添加到会话

但是,由于您希望apache webserver为资源提供服务,因此您需要在apache中验证会话。这意味着你需要扩展apache,以便你可以检查一些环境变量或类似的重写条件。

你可以想象,这有点复杂。

正如您提到mod_auth,IIRC,您可以查询Mysql数据库。这样做甚至可以验证请求URI。在你的情况下,这可能是一个简单的变种。