IIS 10 - 用于停止图像热链接的 URL 重写规则 - 工作时也会影响域名托管服务商本身
IIS 10 - ULR Rewrite rule for stopping Image Hotlinking - when working also affects the domain host itself
Windows 2016 Server 运行 IIS 10 与 URL 重写 已安装模块。
服务器设置在服务器场中。
在过去的 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 帮助我完成了这个漫长的冒险。
Windows 2016 Server 运行 IIS 10 与 URL 重写 已安装模块。
服务器设置在服务器场中。
在过去的 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 帮助我完成了这个漫长的冒险。