在URL重写中排除目录

时间:2011-09-04 14:24:18

标签: asp.net iis url-rewriting web-config

我在web.config上有这个代码

<rule name="Imported Rule 2" stopProcessing="true">
  <match url="^(.*)$" ignoreCase="false" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
  </conditions>
  <action type="Rewrite" url="default.asp?q={R:1}" appendQueryString="true" />
</rule>

我希望特定目录不包含此规则。 我该怎么办?

2 个答案:

答案 0 :(得分:14)

要排除此规则处理的特定文件夹(/contact//presentation//db/site/ - 这些文件夹中的任何内容),您可以再添加一个条件,如下所示:< / p>

<rule name="Imported Rule 2" stopProcessing="true">
    <match url="^(.*)$" ignoreCase="false" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_URI}" pattern="^/(contact|presentation|db/site)" negate="true" />
    </conditions>
    <action type="Rewrite" url="default.asp?q={R:1}" appendQueryString="true" />
</rule>

通过附加条件做好事是因为它易于阅读/理解这条规则是什么。


如果你对一般的正则表达式很好,那么你可能更喜欢这种方法:将这样的条件转换为匹配模式(最终你会得到相同的结果,它会更快一点......但是有点难度读取):

<rule name="Imported Rule 2" stopProcessing="true">
    <match url="^(?!(?:contact|presentation|db/site)/)(.*)$" ignoreCase="false" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="default.asp?q={R:1}" appendQueryString="true" />
</rule>

答案 1 :(得分:1)

这就是我的博客目录在root和Wordpress中使用代码ignitor的方式/ blog /

博客文件夹还有原始的web.config文件,这只是该文件的第二条规则...

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
     <rewrite>
        <rules>        
            <rule name="wordpress - Rule 1" stopProcessing="true">
                <match url="^blog" ignoreCase="false"/>
                <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                </conditions>
                <action type="Rewrite" url="/blog/index.php"/>
            </rule>
            <rule name="app" patternSyntax="Wildcard">
                <match url="*"/>
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                </conditions>
                <action type="Rewrite" url="index.php"/>
            </rule>
    </rules>
</rewrite>