2

目前,我们正在尝试在我们的 web.config 中设置从 htttp 到 https 的重定向,仅限于我们使用的域。但它不起作用。

<rewrite>
        <rules>
            <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                <match url="^(?:http(?:s)?:\/\/)?(?:[^\\.]+\.)?mysite\.com(\/.*)?$" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                </conditions>
                <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
            </rule>
        </rules>
    </rewrite>

此规则在正则表达式编辑器中运行良好。但不在网络服务器上。http://rubular.com/r/3NQTozcigZ

^(?:http(?:s)?:\/\/)?(?:[^\\.]+\.)?mysite\.com(\/.*)?$

查看 failedreqlogfiles pattern_match 是错误的。有什么见解吗?

在做了更多测试后,我发现这有效。

http://sub.site.com/

但这行不通。

http://sub.site.com/Account/Logon
4

2 回答 2

1

你需要正则表达式吗?如果您只是将所有流量重定向到 HTTPS,那么应该可以这样:

<rule name="HTTP to HTTPS redirect" stopProcessing="true">
   <conditions>
      <add input="{HTTPS}" pattern="off" ignoreCase="true" />
   </conditions>

   <action 
      type="Redirect" 
      redirectType="Permanent" 
      url="https://{HTTP_HOST}{REQUEST_URI}" 
      appendQueryString="false" 
   />
</rule>

我倾向于使用redirectType="Permanent"而不是"Found",因为HTTP 301响应通常对 SEO 更好。

如果您要将网站永久迁移到 HTTPS,您可能还需要查看发送Strict-Transport-Security。这将确保现代浏览器永远不会通过非安全连接请求您的站点。

于 2013-06-06T18:53:04.217 回答
1

这里使用的模式url只是为了再次匹配请求的路径(并且只有路径,而不是 url)。

如果要检查域以及是否使用了 https,则必须依赖以下条件:

<rule name="Redirect mysite.com to HTTPS" stopProcessing="true">
  <match url=".*" />
  <conditions logicalGrouping="MatchAll">
    <add input="{HTTPS}" pattern="^OFF$" />
    <add input="{HTTP_HOST}" pattern="mysite\.com$" />
  </conditions>
  <action type="Redirect" url="https://{HTTP_HOST}/{R:0}" />
</rule>

此规则将检查logicalGrouping="MatchAll"任何路径 ( ) 上的两个条件是否为真(这就是这里的目的.*):

  • 请求未使用 HTTPS
  • 请求的域以mysite.com

供参考:http ://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Accessing_URL_Parts_from_a_Rewrite_Rule

于 2013-06-08T03:00:58.147 回答