web.config中的以下内容用于重写工作正常:
<rule name="foo" stopProcessing="true">
<match url="foo.dat$"/>
<conditions>
<!-- Match brotli requests -->
<add input="{HTTP_ACCEPT_ENCODING}" pattern="br" />
</conditions>
<action type="Rewrite" url="_compressed_br/foo.dat" />
</rule>
我想添加一个条件以确保仅当子文件夹中的压缩文件存在时才完成重写:
<rule name="foo" stopProcessing="true">
<match url="foo.dat$"/>
<conditions>
<!-- Match brotli requests -->
<add input="{HTTP_ACCEPT_ENCODING}" pattern="br" />
<!-- Check if the pre-compressed file exists on the disk -->
<add input="{DOCUMENT_ROOT}/_compressed_br/foo.dat" matchType="IsFile" negate="false" />
</conditions>
<action type="Rewrite" url="_compressed_br/foo.dat" />
</rule>
重写永远不会发生这种情况。这意味着检查总是返回false。我也尝试了以下方法使该条件无济于事:
<add input="{DOCUMENT_ROOT}_compressed_br/foo.dat" matchType="IsFile" negate="false" />
<add input="/_compressed_br/foo.dat" matchType="IsFile" negate="false" />
<add input="_compressed_br/foo.dat" matchType="IsFile" negate="false" />
任何人都可以给这个小费吗?
编辑(2019-09-27):文件夹结构:
Web应用程序foo的目录是... \ dist。打开Web应用程序的URL是:http://localhost/foo/
<rule name="foo" stopProcessing="true">
<match url="^foo\.dat$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_ACCEPT_ENCODING}" pattern="br" />
<!-- {APPL_PHYSICAL_PATH} equals to {DOCUMENT_ROOT} + "dist\" in your setup -->
<add input="{APPL_PHYSICAL_PATH}_compressed_br\foo.dat" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="_compressed_br/foo.dat" />
<serverVariables>
<set name="RESPONSE_Content-Encoding" value="br" />
</serverVariables>
</rule>