Mod_rewrite作为访问控制 - 如何传递所有页面资源?

时间:2012-09-26 19:32:03

标签: mod-rewrite

我在Apache上使用mod_rewrite作为访问控制。设置规则使得如果用户未登录,则他将无法访问大多数页面。某些页面(所有页面都具有* .php扩展名)被网站管理员选为“公共页面”。 “公共页面”可以向未登录的用户授予权限。

匿名用户无法访问未被授予公开许可的各种图片和其他资源;他们将用户发送到主页面。这正是我想要的行为。

问题是这些公共页面具有从远程目录链接的各种嵌入元素。这些元素被相同的重写规则拒绝。

是否可以传递任何来自重写页面的资源请求,但是否则会阻止它们?

1 个答案:

答案 0 :(得分:0)

  

是否可以传递来自重写页面的任何资源请求,但是否则阻止它们被阻止?

如果引用者是一个php页面(或任何其他公共页面)的URL,您可以对%{HTTP_REFERER}中的RewriteCond var进行额外检查以允许访问。这样做的问题是引用者可能被欺骗。它看起来像是:

RewriteCond %{HTTP_REFERER} ^(http://your-domain.com)?/path/to/public\.php$ [OR]
RewriteCond %{HTTP_REFERER} ^(http://your-domain.com)?/path/to/another-public\.php$ [OR]
RewriteCond %{HTTP_REFERER} ^(http://your-domain.com)?/public/stuff/.*\.php$
RewriteRule ^ - [L]

规则本身可能会有所不同,具体取决于您现有的规则(如果引用者与上述规则之一匹配,则此规则只会传递请求。)