我的PHP应用程序使用404文档生成HTML文件,因此对同一HTML文件的多次查询只会导致生成一次。

我想拦截对HTML文件的请求,以便用户需要建立一个PHP会话来提取文件。

在最好的情况下,会在URL中使用SESSION ID并强制它可以用作进一步的身份验证。例如,登录会向您发出SessionID,并且只允许您访问某些HTML文件。

我知道通过更改我的cookie我可以欺骗一个请求,但那没关系。

我将如何做到这一点?

有帮助吗?

解决方案

这样的东西可以起作用(我还没有测试过):

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。

其他提示

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存储区。)

您可以使用 Apache模块mod_rewrite 重定向请求 .html PHP脚本的URL:

RewriteEngine on
RewriteRule \.html$ script.php [L]

然后, $ _ SERVER ['REQUEST_URI'] 变量中提供了请求的URI路径和查询。

将缓存文件从您的Web根目录中删除,但仍然可以在PHP可以访问它们的位置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top