我的PHP应用程序使用404文档生成HTML文件,因此对同一HTML文件的多次查询只会导致生成一次。
我想拦截对HTML文件的请求,以便用户需要建立一个PHP会话来提取文件。
在最好的情况下,会在URL中使用SESSION ID并强制它可以用作进一步的身份验证。例如,登录会向您发出SessionID,并且只允许您访问某些HTML文件。
我知道通过更改我的cookie我可以欺骗一个请求,但那没关系。
我将如何做到这一点?
答案 0 :(得分:3)
SetEnvIf HTTP_COOKIE "PHPSESSID" let_me_in
<Directory /www/static/htmls>
Order Deny,Allow
Deny from all
Allow from env=let_me_in
</Directory>
当然,用户可以在他的浏览器中手动创建这样的cookie(有扩展功能可以在Firefox中使用,并且您可以随时编辑浏览器的cookie存储区。)
答案 1 :(得分:3)
这样的东西可以起作用(我还没有测试过):
RewriteCond %{HTTP_COOKIE} PHPSESSID=([a-zA-Z0-9]+)
RewriteCond %{REQUEST_FILENAME} %{REQUEST_FILENAME}-%1.html
RewriteRule ^ %{REQUEST_FILENAME}-%1.html
它假定您将"-$session_id.html"
附加到文件名($session_id
是PHP的会话ID)。
它应该是安全的,并且好处是文件由Web服务器直接提供而根本不调用PHP。
答案 2 :(得分:1)
您可以使用Apache module mod_rewrite将.html
网址的请求重定向到PHP脚本:
RewriteEngine on
RewriteRule \.html$ script.php [L]
然后,$_SERVER['REQUEST_URI']
变量中提供了请求的URI路径和查询。
答案 3 :(得分:0)
将缓存文件从您的Web根目录中删除,但仍然可以在PHP可以访问它们的位置。