(我已经发布StackOverflow 上的这个问题因为搜索答案会显示 StackOverflow 上的相关问题,这些问题得到了答案和许多赞成票。但我的问题到目前为止只获得了反对票和“离题”关闭票,所以我试着在这里提问,在哪里它可能被认为更切题。)
我想进行 URL 重写(或重定向,如有必要,例如在这个回答的问题中), 但我希望它在请求的 URL 仅仅是站点根目录(没有文件或子目录,也没有查询字符串)时才重写/重定向。
即我只想要以下请求网站重写/重定向至TheSite.net/home.htm,但要求TheSite.net/FAQ.htm或者TheSite.net/sub或者TheSite.net/?parameter=yep不被重写/重定向。
我已经获得了重写和重定向的工作,例如:
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Rewrite home page to Home.htm" stopProcessing="true">
<match url="^" />
<action type="Rewrite" url="/Home.htm" />
</rule>
</rules>
</rewrite>
</system.webServer>
我也尝试过<match url="^$" />
和<match url="TheSite.net" />
,但它们自然也会重写 TheSite.net/?parameter=yep,而我需要它不这样做。也许如果有另一个属性<match>
可以让我匹配空查询字符串,但如果有查询字符串则不行(或者如果斜杠后有任何内容则不匹配)?
我希望有一条合适的规则可以实现我想要的功能,但是我的 RegEx 语法技能无法胜任这项任务,而且我还没有找到足够接近的示例。
在这个网站上,我看到IIS URL 重写模块查询字符串参数看起来它可能是可以工作的东西,但我想要的却相反——仅当 URL 中的域名后没有查询字符串或其他内容时才重写。
答案1
好的,在对奇怪情况进行完整测试后,我似乎通过玩条件找到了解决方案,即:
<rule name="Rewrite home page to Home.htm" stopProcessing="true">
<match url="^$" />
<conditions>
<add input="{QUERY_STRING}" pattern=".+=(.+)" negate="true" />
</conditions>
<action type="Rewrite" url="/Home.htm" />
</rule>