IIS URL重写 – 将任何HTTPSstream量redirect到子域

我们的托pipe环境决定了通过特定子域的所有安全stream量音乐旅行。

我们正在使用的.NET CMS Umbraco,据我所知,没有任何function“分配”一个特定的页面到一个子域。

该场景是:

  1. 我们的网站包含1页和1个包含必须安全的子页面的文件夹
  2. 用户请求/页面或/ page2 /子页面
  3. 如果请求来自HTTP,则此stream量将redirect到HTTPS
  4. 如果HTTP_HOST不包含子域安全。 然后添加它,否则继续

例如

请求等于/ page2 /页面
301redirect到https:// secure。{http_host} / {request}
随后的请求必须被忽略(为了避免循环)

https:// secure.domain.com/page =>无更改,保持不变
https:// domain.com/page =>插入子域,https://secure.domain.com/page

在我看来,逻辑是:

INPUT =完整URL = http://www.domain.com/page

如果input包含HTTPS然后检查完​​整的URL,它是否包含“安全”? 如果是,什么也不做,如果没有添加“安全”

8月19日更新

考虑到这一点,我拼凑出了两条正确的方向:

这是我build议的:

强制某些stream量进入​​安全域的一个规则是:

<rule name="Force 'Umbraco' to secure" stopProcessing="true"> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_URI}" pattern="^/umbraco/(.+)$" ignoreCase="true" /> <add input="{HTTP_HOST}" negate="true" pattern="^secure\.(.+)$" /> </conditions> <action type="Redirect" url="https://secure.{HTTP_HOST}/{R:0}" redirectType="Permanent" /> </rule> 

另一个规则,然后删除安全域,期望在安全域上的stream量。

 <rule name="Remove secure, expect for Umbraco" stopProcessing="true"> <match url="(.*)" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTP_HOST}" pattern="^secure\.(.+)$" /> <add input="{REQUEST_URI}" negate="true" pattern="^/umbraco/(.+)$" ignoreCase="true" /> </conditions> <!-- Set Domain to match environment --> <action type="Redirect" url="http://staging.domain.com/{R:0}" appendQueryString="true" redirectType="Permanent" /> </rule> 

这适用于单个目录或文件组,但是我无法将其他逻辑添加到这两个规则中。 例如,你可能有3个需要安全的文件夹,我尝试添加这些文件作为'取消logging',但是根本没有发生redirect。

嗯! 大号

虽然有用,但是您提出的redirect方法并没有提供与将httpsurl放在页面上的正确位置相同的安全优势。

如果用户通过HTTP提交请求并收到redirect响应,则他们提交的任何数据将以明文方式前往您的站点。 您只能获得您网站发回给用户的信息的保护。 这比没有好,但是你需要小心。

例如,如果您的http页面的angular落有一个login表单,并且有一个http表单目标,那么无论您如何回复,用户都将以明文forms向您传递login信息。 另一方面,如果您的http页面有一个到httplogin页面的链接,并且您将其redirect到https页面,该页面会使用https表单目标URL来呈现表单,那么这将更安全。

你甚至可以为https://domain.com/page提供redirect服务吗&#xFF1F; (而不是http)。 如果你能回应,那么你究竟有什么限制?