使用 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;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" />
但最终结果是一样的。不过,您无法将主浏览器窗口重定向到其他页面。