1

您好我有以下规则要导入 IIS URL 重写:

RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
RewriteRule .* - [F]

但是,在使用导入时,我收到此错误:此规则未转换,因为只有一些条件使用 OR 标志。

关于如何在 IIS 中执行此操作的任何想法?

4

1 回答 1

1

正如我在评论中提到的,IIS 重写模块不能针对相同的规则执行ANDOR(当它是一组条件时,它是MatchAnyor MatchAll)。

以下是解决问题的方法:

<rule name="My rule" stopProcessing="true">
    <match url=".*" ignoreCase="false" />
    <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_METHOD}" pattern="GET" />
        <add input="{QUERY_STRING}" pattern="[a-zA-Z0-9_]=(http://)|(\.\.//?)+|(/([a-z0-9_.]//?)+)" />
    </conditions>
    <action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>

它使用逻辑|(OR)运算符将您拥有的所有 3 条规则“组合”在一条规则中:[a-zA-Z0-9_]=(http://)|(\.\.//?)+|(/([a-z0-9_.]//?)+).

于 2013-08-08T18:09:36.517 回答