2015-04-17 110 views
0

我在.htaccess中有一些规则,我试图在新的IIS7重写模块区域中实现它们。IIS 7重写.htaccess规则的正则表达式相当于

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] 

有谁知道我该怎么做?

感谢

+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"标志,将只匹配指向现有文件的URL。该模式中的\.将匹配一个点。


的更多信息: