IIS 7重写相当于.htaccess规则的正则表达式

时间:2015-04-17 12:40:19

标签: regex apache .htaccess mod-rewrite iis-7

我在.htaccess中有一些规则,我试图在新的IIS7重写模块区域中实现它们。

RewriteCond %{REQUEST_FILENAME} ^.*(mp3|m4a|jpeg|jpg|gif|png|bmp|pdf|doc|docx|ppt|pptx|)$

 RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]

 RewriteRule . - [R=403,L]

有谁知道我该怎么做?

由于

1 个答案:

答案 0 :(得分:1)

令人惊讶的是:

<rule name="BlockUnauthorized">
  <match url="."/>
  <conditions>
    <add input="{REQUEST_FILENAME}" type="Pattern"
         pattern="^.*(mp3|m4a|jpeg|jpg|gif|png|bmp|pdf|doc|docx|ppt|pptx|)$" />
    <add input="{HTTP_COOKIE}" type="Pattern"
         pattern="^.*wordpress_logged_in.*$" negate="true" ignoreCase="true" />
  </conditions>
  <action type="CustomResponse" statusCode="403"
          statusReason="You need to log in, fool!" 
          statusDescription="You need to log in, fool!" />
</rule>

直接翻译的规则,因此您对原始规则的任何问题也可能会出现在此处。


一个问题是REQUEST_FILENAME上的第一个模式;它以|)结尾,这使得整个组都是可选的。由于.*会匹配任何内容,因此它等同于^.*$。也就是说,它将始终匹配任何网址。

如果您只想匹配以这些扩展名结尾的文件,可以使用:

<match url="." isFile="true"/>
...
<add input="{REQUEST_FILENAME}" type="Pattern"
     pattern="\.(mp3|m4a|jpeg|jpg|gif|png|bmp|pdf|doc|docx|ppt|pptx)$"
     ignoreCase="true" />

isFile="true"标记仅匹配指向现有文件的网址。模式中的\.将匹配一个点。


更多信息: