IIS 7重写.htaccess规则的正则表达式相当于
问题描述:
我在.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]
有谁知道我该怎么做?
感谢
答
这是令人惊讶的相似:
<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。该模式中的\.
将匹配一个点。
的更多信息:
这是否有道理? –