【问题标题】:Domain Rewrite for both HTTP and HTTPS in IIS 7IIS 7 中 HTTP 和 HTTPS 的域重写
【发布时间】:2015-07-27 13:29:04
【问题描述】:

我想在一个请求中执行多个301 重定向,我发现this article 很有帮助。但是,我有一个问题,http://example.com 重定向到 https://www.example.comhttps://example.com 不重定向到 https://www.example.com

下面是我的例子:

  1. SEO - 删除 default.aspx(工作正常,但没有 HTTPS)
    https://www.example.com/app/default.aspx => https://www.example.com/app/

但是http://www.example.com/app/default.aspx => http://www.example.com/app/

  1. SEO - 删除尾部斜杠(不起作用且没有 HTTPS,如上所述)
    所有链接都改为斜杠
    http://www.example.com/app => http://www.example.com/app/
    https://www.example.com/app => https://www.example.com/app/

  2. SEO - ToLower(工作正常,但没有上述 HTTPS)
    http://www.example.com/APP => http://www.example.com/app
    https://www.example.com/APP => https://www.example.com/app

  3. SEO - http 规范重定向(100% 有效)
    http://example.com/app => https://www.example.com/app

  4. SEO - https 规范重定向(根本不起作用)
    https://example.com/app => https://www.example.com/app - 失败

  5. SEO - 非规范重定向(不能 100% 工作。如果没有此规则,样式表将无法加载,但与上述任何不匹配的其他链接也不会出现)
    @ 987654338@ => https://example.com/app/
    http://example.com/app => http://example/com/app/
    https://www.example.com/app => https://www.example.com/app/
    http://www.example.com/app => http://www.example.com/app/

这是我实现的,问题如上。

<rewrite>
    <rules>
        <clear />
        <rule name="WhiteList - resources" stopProcessing="true">
            <match url="^resources/" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
            <action type="None" />
        </rule>
        <rule name="SEO - remove default.aspx" stopProcessing="false">
            <match url="(.*?)/?default\.aspx$" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTP_METHOD}" pattern="GET" />
            </conditions>
            <action type="Rewrite" url="_{R:1}" />
        </rule>
        <rule name="SEO - Remove trailing slash" stopProcessing="false">
            <match url="(.+)/$" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTP_METHOD}" pattern="GET" />
               <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            </conditions>
            <action type="Rewrite" url="_{R:1}" />
        </rule>
        <rule name="SEO - ToLower" stopProcessing="false">
            <match url="(.*)" ignoreCase="false" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTP_METHOD}" pattern="GET" />
                <add input="{R:1}" pattern="[A-Z]" ignoreCase="false" />
            </conditions>
            <action type="Rewrite" url="_{ToLower:{R:1}}" />
        </rule>
        <rule name="SEO - http canonical redirect" stopProcessing="true">
            <match url="^(_*)(.*)" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTP_HOST}" matchType="Pattern" pattern="^www\.example\.com$" ignoreCase="true" negate="true" />
                <add input="{HTTP_METHOD}" pattern="GET" />
            </conditions>
            <action type="Redirect" url="https://www.example.com/{R:2}" />
        </rule>
        <rule name="SEO - https canonical redirect" stopProcessing="true">
            <match url="^(_*)(.*)" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTP_HOST}" matchType="Pattern" pattern="^www\.example\.com$" ignoreCase="true" negate="true" />
                <add input="{HTTP_METHOD}" pattern="GET" />
                <add input="{HTTPS}" pattern="^ON$" ignoreCase="true" />
            </conditions>
            <action type="Redirect" url="https://www.example.com/{R:2}" />
        </rule>
        <rule name="SEO - non-canonical redirect" stopProcessing="true">
            <match url="^(_+)(.*)" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTP_METHOD}" pattern="GET" />
            </conditions>
            <action type="Redirect" url="{R:2}" />
        </rule>         
    </rules>
</rewrite>

【问题讨论】:

  • 考虑在 https 条件后添加 ignoreCase="true":
  • 不幸的是托尼没有帮助。我今天早上试过了。

标签: redirect iis-7 web-config rewrite isapi-rewrite


【解决方案1】:

这并不是真正的解决方案,因为我发现了 IIS 的实际问题。

当您使用上述设置(或 https 规范重定向)的规则访问 https://example.com 时,如果您没有“裸域”认证,它将首先给您一个证书错误。如果用户选择继续,则会重定向到https://www.example.com

我认为这可能发生在“DNS 协商”级别而不是 IIS 级别。

【讨论】:

  • 只需使用任何证书添加到裸域(端口 443)的映射,然后重定向正确的 www 域 web.config 用户不会收到错误的证书错误,因为浏览器将重定向到打开页面前正确的网址。
猜你喜欢
  • 2012-07-23
  • 2011-05-05
  • 2012-02-28
  • 2015-12-08
  • 2016-03-20
  • 2010-10-17
  • 1970-01-01
  • 2012-06-18
  • 2021-02-17
相关资源
最近更新 更多