我想阻止(或允许(来自IIS中某个特定URL站点的一些ip。事实上,我在web.config中有一条重写url的规则:
<rule name="FOO_RULE" stopProcessing="true">
<match url="foo/(.*)" ignoreCase="false" />
<action type="Rewrite" url="http://pippo.it/{R:0}" logRewrittenUrl="true" />
</rule>
此规则适用于所有IP呼叫者,这是可以的。
现在,我需要相同的规则来阻止特定路径的某些IP。问题是路径以";foo/";(例如"foo/ret/neneneba API/getName"(和IIS将仅对foo_RULE工作。
我试过:
- 在我的站点的同一web.config中,仅为该路径("foo/ret/neneneba API/getName"(创建了一个新规则EXCEPTION_foo_path,并对某些IP进行了限制,如:
<rules>
<rule name="FOO_RULE" stopProcessing="true">
<match url="foo/(.*)" ignoreCase="false" />
<action type="Rewrite" url="http://pippo.it/{R:0}" logRewrittenUrl="true" />
<conditions>
<add input="{REQUEST_URI}" pattern="foo/rest/API/getName" negate="true" />
</conditions>
</rule>
<rule name="EXCEPTION_FOO_PATH">
<match url="foo/rest/API/getName" />
<conditions>
<add input="{REMOTE_ADDR}" pattern="111.222.333.444" negate="true" />
</conditions>
<action type="Rewrite" url="http://pippo.it/{R:0}" logRewrittenUrl="true" />
</rule>
</rules>
并且这不起作用(如果我在FOO_RULE中评论条件也是一样(;
- 在IIS主站点内创建了一个应用程序;foo/ret/neneneba API/getName";(生成了一个新的web.config(,并为一些IP添加了限制(来自插件IIS(,但仍然不起作用
概念是不破坏原始FOO_RULE
有人知道吗?提前谢谢!
您可以颠倒这两个规则,删除"FOO_ RULE";并在"0"中阻止请求;EXCEPTION_FOO_PATH;(查看logicalgrouping="MatchAny"(:
<rules>
<rule name="EXCEPTION_FOO_PATH" stopProcessing="true">
<match url="foo/rest/API/getName" />
<conditions logicalGrouping="MatchAny">
<add input="{REMOTE_ADDR}" pattern="111.222.333.444" />
<add input="{HTTP_X_Forwarded_For}" pattern="111.222.333.444" />
</conditions>
<action type="AbortRequest" />
</rule>
<rule name="FOO_RULE" stopProcessing="true">
<match url="foo/(.*)" ignoreCase="false" />
<action type="Rewrite" url="http://pippo.it/{R:0}" logRewrittenUrl="true" />
</rule>
</rules>
因此,第一条规则首先适用:
- 如果url是";foo/ret/neneneba API/getName";AND ip是";111.222.333.444"->中止请求
- 在所有其它情况下;FOO_ RULE";apply中重写url;http://pippo.it/{R:0}">
您可以尝试类似于以下规则来实现您的要求,在"添加条件"对话框中,指定{REMOTE_ADDR}作为条件输入。
<rule name="block IP" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{URL}" pattern=" " />
<add input="{REMOTE_ADDR}" pattern="xxx.xxx.xxx.xxx" />
</conditions>
<action type="CustomResponse" statusCode="401" statusReason="permission required" statusDescription="Access is denied due to invalid credentials." />
</rule>