重写IIS7中的URL

时间:2012-01-11 12:55:53

标签: iis iis-7 url-rewriting web-config

我一直关注http://learn.iis.net/page.aspx/806/seo-rule-templates/,这是在IIS7中创建SEO友好URL的近乎完美的指南。

我有一个问题:

如果我创建了重写www.domain.com/contact/的规则,我会进入web.config:

<rule name="RewriteUserFriendlyURL1" stopProcessing="true">
  <match url="^([^/]+)/?$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Rewrite" url="?p={R:1}" />
</rule>

但是我不能做www.domain.com/contact/send/

如果我创建了重写www.domain.com/contact/send/的规则,我会进入web.config:

<rule name="RewriteUserFriendlyURL1" stopProcessing="true">
  <match url="^([^/]+)/([^/]+)/?$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Rewrite" url="?p={R:1}&amp;a={R:2}" />
</rule>

但是我不能做www.domain.com/contact/

这两条规则都是这样做的,我无法在/scripts//css//images/文件夹中看到任何脚本,css og图像。

如何制定规则以匹配AND与上述3个文件夹不匹配?

1 个答案:

答案 0 :(得分:3)

您的规则可能是这样的(我已经扩展并评论它以便更容易理解和最终编辑):

^
    (
        (?!css|scripts|images)  # The directories you don't want to match
        [^/]+                   # The matched directory
    )
    (
        /
        (
            ([^/]+)             # Optional part
            /?                  # Optional trailing slash
        )?
    )?
$

其中包含以下内容:

<match url="^((?!css|scripts|images)[^/]+)(/(([^/]+)/?)?)?$" />

然后,重写网址应更新为:?p={R:1}&amp;a={R:4},因为新正则表达式的捕获次数发生了变化。