IIS出站规则匹配文件名中不存在子字符串

时间:2014-09-15 10:08:23

标签: javascript regex iis configuration

我有以下IIS配置,强制PDF在浏览器中作为文件下载,而不是在浏览器窗口中打开。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules>
                <rule name="Force Download for PDFs" preCondition="FileIsPDF">
                    <match serverVariable="RESPONSE_Content-Disposition" pattern=".*" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" pattern="(.*)\\([^/]+)\.pdf$" />
                    </conditions>
                    <action type="Rewrite" value="attachment; filename={C:2}.pdf" />
                </rule>
                <preConditions>
                    <preCondition name="FileIsPDF">
                        <add input="{REQUEST_FILENAME}" pattern="\.pdf$" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

但是,如果文件名是xxx_print.pdf,我需要它不适用,换句话说,我希望上述规则匹配所有.pdf文件,除了那些在文件名末尾有_print的文件。 这怎么可能?需要为IIS7及更高版本工作。

请注意,如果您知道如何使用javascript的正则表达式匹配没有特定子字符串的字符串,则可以在不了解IIS的情况下回答这个问题。

1 个答案:

答案 0 :(得分:0)

原来我只需要使用negate =“true”属性为规则添加另一个条件:

                    <add input="{REQUEST_FILENAME}" pattern="(.*)\\([^/]+)_print\.pdf$" negate="true" />