IIS 7 针对非网站本身引用的图像的 URL 重写规则

IIS 7 针对非网站本身引用的图像的 URL 重写规则

使用 IIS 7 进行 URL 重写的新方法。我需要将网站本身未引用的图像重定向到另一个页面。例如,如果有人在浏览器中输入“www.somesite.com/images/image001.jpg”,它将把用户重定向到“www.somesite.com/prevent.aspx?image001.jpg”。

我在这里找到了一些防止热链接的好技巧:http://blogs.iis.net/ruslany/archive/2009/04/08/10-url-rewriting-tips-and-tricks.aspx,效果很好,但是与上面的例子中所想要的完全不同。

防止热链接的重写规则:

<rule name="Prevent image hotlinking">
  <match url=".*\.(gif|jpg|png)$"/>
  <conditions>
    <add input="{HTTP_REFERER}" pattern="^$" negate="true" />
    <add input="{HTTP_REFERER}" pattern="^http://ruslany\.net/.*$" negate="true" />
  </conditions>
  <action type="Rewrite" url="/images/say_no_to_hotlinking.jpg" />
</rule>

重定向的重写规则:

<rule name="Query String Rewrite">
  <match url="page\.asp$" />
  <conditions>
    <add input="{QUERY_STRING}" pattern="p1=(\d+)" />
    <add input="##{C:1}##_{QUERY_STRING}" pattern="##([^#]+)##_.*p2=(\d+)" />
  </conditions>
  <action type="rewrite" url="newpage.aspx?param1={C:1}&amp;amp;param2={C:2}" appendQueryString="false"/>
</rule>

无论如何,以某种方式结合规则来做我想做的事情?

提前致谢

答案1

如果您想停止热链接并通知用户,通常需要发回一张虚拟图像,并附上一条文字,说明不允许热链接。将请求重定向到说明这一点的页面无济于事,因为用户很可能看不到它。

图像通过 <img> 标签加载,尽管浏览器会遵循重定向,但它始终期望收到某种受支持的图像。如果请求重定向到 HTML 页面,浏览器将不会显示图像或显示收到无效图像的图标。不过,仍会显示图像热链接的页面。

因此,Ruslan Yakushev 建议的重写规则实际上是处理此问题的正确方法。您还可以使用重定向进行响应,例如以下操作:

<action type="Redirect" url="http://www.somesite.com/prevent.aspx?{REQUEST_FILENAME}" appendQueryString="false" redirectType="Found" />

但最终结果是一样的。不过,您无法将主浏览器窗口重定向到其他页面。

相关内容