在Web.config中删除ASPX FILE扩展但如果URL包含句点则否定重写

时间:2013-04-17 21:35:29

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

好吧,现在我们大多数人可能会使用下面的标准规则来删除网址中的aspx扩展名。

<rule name="Remove">
      <!--Removes the .aspx extension for all pages.-->
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="{R:1}.aspx" />
    </rule>

但是我想修改规则以防止写规则捕获任何包含句点的url。

如果有人试图输入http://www.domain.com/picture.jpg 规则没有抓住它。

幸运的是,IsFile和IsDirectory条件会阻止实际文件被规则命中,但每当我遇到有人在服务器上存在的文件中输入时,规则就会捕获它并且asp.net会执行像这样的东西:

http://www.domain.com/404error.aspx?aspxerrorpath=/picture.jpg.aspx

我希望在找不到文件时不通过规则。

基本上我只需要能够添加一个条件,该条件在域名后的url中找到句点时就会否定。我假设某种REGEX会起作用。我似乎无法让它正常工作。

1 个答案:

答案 0 :(得分:0)

我能够提出以下解决方案。

        <rule name="RewriteASPX" stopProcessing="true" enabled="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAll">
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                <add input="{REQUEST_FILENAME}.aspx" matchType="IsFile" />
            </conditions>
            <action type="Rewrite" url="{R:1}.aspx" />
        </rule>