假设你的服务器上有许多 html、css、js、img 等文件,存在一个目录中。通常情况下,通过输入完整的 URL(例如:http://example.com/static-files/sub/index.html),任何互联网用户都可以访问这些文件。
现在,如果你只想让授权用户能够加载这些文件呢?以本例为例,假设你的用户先从以下 URL 登录:http://example.com/login.php
那么,如何允许已登录的用户查看 index.html 文件(或“static-files”下的任何文件),但将该文件限制为其他所有人无法访问呢?
迄今为止,我想出了两种可能的解决方案:
解决方案1
在“static-files”下创建以下 .htaccess 文件:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ ../authorize.php?file=$1 [NC]
然后在 authorize.php 文件中...
if (isLoggedInUser()) readfile('static-files/'.$_REQUEST['file']);
else echo 'denied';
这个 authorize.php 文件被严重简化了,但是你可以得到其中的思路。
解决方法 2
在“静态文件”文件夹下创建以下 .htaccess 文件:
Order Deny,Allow
Deny from all
Allow from 000.000.000.000
然后我的登录页面可以附加每个登录用户的IP地址到.htaccess文件中。显然,这也需要一些清理例程来清除旧的或不再使用的IP地址。
我担心随着用户数量和他们访问的文件数量增加,我的第一个解决方案可能会在服务器上变得非常昂贵。我认为我的第二个解决方案会便宜得多,但由于IP欺骗等原因,也更不安全。我还担心如果有许多同时在线的用户,将这些IP地址写入htaccess文件可能会成为应用程序的瓶颈。哪种解决方案听起来更好,为什么?或者,您能想到完全不同的解决方案比这两个都更好吗?