IIS 7规范URL重定向

8
我很愿意帮忙将网站地址始终保持为www形式,并通过IIS重写来实现。
例如,test.com会变成www.test.com。
典型的重写规则示例如下:
<rule name="Canonical Host Name" stopProcessing="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTP_HOST}" negate="true" pattern="^www\.test\.com$" />
  </conditions>
  <action type="Redirect" url="http://www.test.com/{R:1}" redirectType="Permanent" />
</rule>

但这需要我输入完整的网站URL。对于开发和分段环境(如www.test.dev和www.test.stage),它将无法正常工作。

是否可能创建一个IIS重写规则来处理所有这些情况?


如果您正在使用Visual Studio,配置转换将有助于测试/部署问题。 - Bon
3个回答

4
我为您提供另一种解决方案:
<rule name="Canonical domain name" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTP_HOST}" negate="true" pattern="^www\.([.a-zA-Z0-9]+)$" />
    </conditions>
    <action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}" appendQueryString="true" redirectType="Permanent" />
</rule>

我尝试了这个规则,但它不能处理IP地址的URL。问题在于negate="true"类型的规则会捕获以http://www.为前缀的IP地址。 - mika

1

你说得对,完整的URL需要在web.config中。不过你有几个选择。

  1. 你可以使用配置转换来使正则表达式匹配正确的环境。

  2. 如果在你的web.config中包含所有三个URL重写规则,似乎没有任何危害。听起来你的环境是隔离的,因此每个环境只会匹配其中一个规则。这可能会使你的web.config变得混乱,但不是非常严重。

我会选择选项1。你可以在这里找到有关配置转换的信息:http://msdn.microsoft.com/en-us/library/dd465326.aspx


0

我还建议您在本地环境中尝试另一种变体:

  1. 添加到c:\ Windows \ System32 \ drivers \ etc \ hosts:

127.0.0.1 www.example.com

  1. 在IIS Manager中选择站点,右键单击 -> 编辑绑定.. -> 添加..

  2. 输入主机名:www.example.com

  3. 打开cmd并运行iisreset

现在您可以在浏览器中使用映射到本地主机的www.example.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接