我一直关注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}&a={R:2}" />
</rule>
但是我不能做www.domain.com/contact/
这两条规则都是这样做的,我无法在/scripts/
,/css/
和/images/
文件夹中看到任何脚本,css og图像。
如何制定规则以匹配AND与上述3个文件夹不匹配?
答案 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}&a={R:4}
,因为新正则表达式的捕获次数发生了变化。