禁用网站以响应静态文件以外的请求

时间:2010-11-02 21:50:45

标签: asp.net iis-7

我的IIS上有2个网站,它们在磁盘上具有相同的物理位置。例如:

www.xxx.com    path on disk : c:\www\xxx.com
img.xxx.com    path on disk : c:\www\xxx.com

我希望img.xxx.com仅对图像,css和js文件等静态文件做出响应。

我的主要目标是从无Cookie域提供静态文件(使用img.xxx.com进行无Cookie请求)。但是,如果我向浏览器写img.xxx.com,我会看到与www.xxx.com相同的内容。我想阻止对img.xxx.com的所有请求,除了images,css和js请求。

我不想为img.xxx.com设置另一个文件夹,因为我很难将所有图片网址更改为新网址。

3 个答案:

答案 0 :(得分:0)

我认为你的想法不会奏效。您需要一个物理上不同的域才能拥有一个真正的“无cookie”域。

  

要保留无Cookie域以提供静态内容,请注册新域名并使用CNAME记录配置DNS数据库,该记录将新域指向现有域A记录。配置Web服务器以提供来自新域的静态资源,并且不允许在此域的任何位置设置任何cookie。在您的网页中,引用静态资源的URL中的域名。

http://code.google.com/speed/page-speed/docs/request.html

答案 1 :(得分:0)

我认为这个想法会起作用。浏览器通过两个不同的域名访问文件无法知道它们共享相同的底层目录。

唯一的问题是您需要过滤访问img.xxx.com域中的有限文件类型列表。

您可以在IIS级别执行此操作 - 例如,为要阻止http://www.isapirewrite.com/的文件类型设置ISAPI重写。

您仍然需要更改应用程序中的URL(即在html中 - 从www.xxx.com到img.xxx.com)。

我认为您也可以使用asp.net这样做 - 在新域和新文件夹下设置一个新的asp.net网站,然后在该网站中设置一个虚拟文件夹链接回原始文件夹夹。然后,您可以通过新的asp.net web.config控制对文件类型的访问。您需要再次更改html中的URL(从www.xxx.com到img.xxx.com/virtual_folder)。我从来没有尝试过这样的事情 - 所以也许这个想法在某个地方存在缺陷。

答案 2 :(得分:0)

为什么不简单的HttpHandler检查每个请求的URL并抛出错误,如果域名是img.xxx.com并且文件不是静态的?

也许有一个问题,但据我所知,这可以发挥作用。

(仅讨论“阻止对img.xxx.com的所有请求,除了图像,css和js请求”部分,而不是无cookie域名部分)