IIS URL重写为不将.htm传递给重写

时间:2015-10-15 16:00:22

标签: iis url-rewriting iis-7.5

我有一个多服务器的IIS服务器。我有seo友好URLS的基本重写规则。

示例:

www.something.com/here-is-the-page

当前转换为

www.something.com/index.htm?pagetitle=here-is-the-page

问题是,一个域需要此规则才能允许URL在末尾以.htm读取。

示例:

www.something.com/here-is-the-page.htm

需要转换为

www.something.com/index.htm?pagetitle=here-is-the-page

(注意,刚删除了.htm,虽然我仍然希望.htm显示在位置栏中)...

1 个答案:

答案 0 :(得分:0)

感谢所有人的帮助......下面的[讽刺]是解决方案。 这里的关键是MatchAll。

查看网址

检查这是否适用于www.something.com

检查以确保没有带有filename.htm

的实际文件

检查没有该名称的目录

如果文件是sitemap.htm(确实存在,则不进行处理)这应该通过先前的文件检查来捕获,但只是添加了过度杀伤。由于这是重写而不是重定向,因此.htm将继续显示在导航栏中。

<rule name="remove the htm" stopProcessing="true">
  <match url="([_0-9a-z-]+)\.htm$" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{HTTP_HOST}" pattern="^(www.something.com)$" />
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    <add input="{REQUEST_FILENAME}" pattern="sitemap\.htm$" negate="true" />
  </conditions>
  <action type="Rewrite" url="/index.cfm?pagetitle={R:1}" />
</rule>