【问题标题】:Rewrite rules converted to IIS 7.5重写规则转换为 IIS 7.5
【发布时间】:2013-08-09 15:24:23
【问题描述】:

您好,我有以下规则要导入到 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 中执行此操作的任何想法?

【问题讨论】:

  • IIS 重写模块不能对同一条规则执行ANDOR(如果是一组条件,则为MatchAnyMatchAll)。
  • 区分大小写的部分重要吗?
  • 嗨 Cheesmacfly - 我不确定区分大小写是否重要。这是加强 Joomla 站点安全性的建议 htaccess 规则。从我的测试来看,这是导致问题的 request_method GET 行......有没有办法嵌套规则/条件?
  • 或者,我可以将其分解为 3 个单独的规则并获得相同的结果吗?所以每个规则都会有请求方法条件,然后是带有规则的查询字符串条件之一?如果你看不出来,我是 htaccess/re-write 的菜鸟
  • 刚刚发布了一个答案。我进行了一些测试,它应该可以工作,但如果没有,请告诉我。

标签: apache iis mod-rewrite rewrite


【解决方案1】:

正如我评论中提到的,IIS 重写模块不能对同一规则执行ANDOR(如果是一组条件,则为MatchAnyMatchAll)。

以下是解决问题的方法:

<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) 运算符:[a-zA-Z0-9_]=(http://)|(\.\.//?)+|(/([a-z0-9_.]//?)+),将您拥有的所有 3 条规则“组合”在一个中。

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2012-07-12
    • 2013-12-01
    • 2014-10-29
    • 2011-04-25
    • 2014-07-03
    相关资源
    最近更新 更多