IIS 10 - 用于停止图像热链接的 URL 重写规则 - 工作时也会影响域名托管服务商本身

IIS 10 - ULR Rewrite rule for stopping Image Hotlinking - when working also affects the domain host itself

Windows 2016 Server 运行 IIS 10URL 重写 已安装模块。
服务器设置在服务器场中。

在过去的 48 小时里,我一直在处理这个问题,但我终究无法弄清楚为什么它不能正常工作。
我看了一段视频,展示了如何设置它以及它是如何工作的,并且我模仿了视频中的操作,但是没有,仍然无法正常工作。

事情就是这样。
使用下面的代码将起作用;如您所见,它具有 pattern="Pattern: " 但是,托管图像的主要站点也将其图像替换为 stop-hotlinking.png 图像。 因此,理论上它可以工作,但托管站点无法访问要显示的图像。
如果我删除 (pattern="Pattern: "),它不起作用。

总结一下。 下面的代码将在所有外部站点以及托管站点上显示“stop-hotlinking.png”图像。

 <rewrite>
    <rules>
        <rule name="STOP-Hot-Linking" enabled="true" stopProcessing="true">
            <match url=".*\.(gif|jpg|png)$" />
            <conditions>
              <add input="{HTTP_REFERER}" pattern="Pattern: ^$" negate="true"/>
              <add input="{HTTP_REFERER}" pattern="Pattern: ^https?://(www\.)?domain\.com/.*$" negate="true"/>
            </conditions>
            <action type="Rewrite" url="/graph/stop-hotlinking.png" />
        </rule>
    </rules>
</rewrite>

我什至尝试过这样的模式,它会在包括托管网站在内的所有网站上显示停止-hotlinking.png。

<add input="{HTTP_REFERER}" pattern="^http://(.*\.)?domain\.com/.*$" negate="true"/>

以下是您可以参考的示例:

假设我的 iis 服务器中有 2 个站点,我想在测试站点中设置一个规则以不允许其他域站点使用图像,因此我将在测试站点。

测试站点索引页面联系人:

<html>
<head>
<title>test.com title page</title>
</head>
<body>
<h2>test.com</h2>
<img src="http://test.com/img.jpg">
</html>

现在我正在尝试从测试站点访问图像到 test2 站点:

以下是我在测试站点中设置的规则:

<rule name="Prevent Image Hotlinking" enabled="true" stopProcessing="true">
<match url=".*\.(jpg|jpeg|png|gif|bmp)$" />
<conditions>
    <add input="{HTTP_REFERER}" pattern="^$" negate="true" />
    <add input="{HTTP_REFERER}" pattern="^http://test.com/.*$" negate="true" />
</conditions>
<action type="Rewrite" url="/hotlink.jpg" logRewrittenUrl="true" />
</rule>

注意:如果它不起作用,请在 bwroser 中硬刷新您的页面,或者您可以尝试以隐私模式打开页面。

我在另一个论坛上得到了帮助,这就是问题所在。
我在我们拥有的多个域上测试同一张图片。
这是最大的问题,图像会被缓存,即使 Google Tools 打开,它仍然会出于任何原因缓存它,我们永远无法弄清楚。 我从托管站点更改为另一张图片,它开始工作了。
我们还发现 Google Chrome 需要在托管网站页面的头部添加一个推荐元标记。

<meta name="referrer" content="origin">

完成上述所有操作并准备好以下代码后。它开始工作了。

<rule name="Prevent Image Hotlinking" enabled="true" stopProcessing="true">
<match url=".*\.(jpg|jpeg|png|gif|bmp)$" />
<conditions>
   <add input="{HTTP_REFERER}" pattern="^https?://(www\.)?(?:DomainOne\.com|DomainTwo\.com|DomainThree\.com)/.*$" negate="true"/>
</conditions>
<action type="Rewrite" url="/graph/stop-hotlinking.png" logRewrittenUrl="true" />
</rule>

在上面,您会看到有多个域,这是为了允许图像托管在它们的域上,所有其他域将获得 STOP 图像。

已完成。
我想 Jalpa 试图提供帮助。
还有来自其他论坛的 gr8gonzo 帮助我完成了这个漫长的冒险。