RewriteRule 标志的行为很奇怪吗?

RewriteRule 标志的行为很奇怪吗?

我有一个包含图片的图库。如果有人从其他地方(远程服务器)链接我的图库图片,则应该显示禁止的图像。这基本上可以正常工作,但现在我发现我的重写规则存在奇怪的行为。规则如下:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://www.mydomain.net/pictures/.*$ [NC]   
RewriteRule .*\.(png|PNG)$ http://www.mydomain.net/pics/linkingpicsforbitten.png [R,L]

究竟发生了什么:图库由 shtml 页面组成,这些页面通过相对路径链接图片,我可以用前后方式浏览图片。这样可以正常显示每张图片。当我调用邪恶远程服务器上的页面(该页面链接我的图库中的图片)时,远程服务器会获取禁用图像,这是我想要的效果,但现在发生了一些奇怪的事情:回到我自己的服务器上,当我在图库中浏览邪恶远程服务器调用的图片时,我突然也获得了禁用图像,甚至在我的图库中也是如此。当我按 F5 重新加载图库时,图片又可以正常工作了。但这是不能接受的。
我该怎么办?我尝试更改和合并或保留 RewriteRule 的标志,但都无济于事。唯一可接受的解决方案是设置 [F] 标志。在这种情况下,邪恶远程服务器看不到禁用图像,而看到空白页,但至少我的图库每次都可以正常工作。但我更希望禁用图像可以正常工作。有什么想法吗?

答案1

被禁止的图片正在您的网络浏览器中缓存。您需要使用 mod_headers 将其设置为永不缓存。

尝试:

<FilesMatch "linkingpicsforbitten\.png$">
<IfModule mod_headers.c>
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</IfModule>
</FilesMatch>

答案2

我相信你的浏览器只是缓存了被禁止的图片。你应该能够使用mod_expires仅对禁止的图像实施不缓存策略。

相关内容