我们有自己的域名,还有多个子域名。其中一个网站需要访问仅有的通过 SSL,但人们可以输入 http 并仍能到达那里。URL-Rewrite 会强制将 http 转换为 https。
所以我的两个子域名是: sub1.domain.org
和sub2.domain.org
。
因此,如果我输入
http://sub1.domain.org/page_on_domain1
它被重写为
https://sub1.domain.org/page_on_domain1
-这是正确的。但是如果我这样做(这是不可能的 -page_on_domain1
不存在sub2.domain.org
:
https://sub2.domain.org/page_on_domain1
我的 url-rewrite 规则似乎工作正常,但我希望最后一个地址给我一个错误页面,因为该页面在该子域上不存在。
我正在 Windows 7 x64 Pro 上的 Firefox 中测试这一点。
我的 url-rewrite 规则如下(我通过 IIS7 GUI 执行此操作):
Requested URL: Matches the Pattern: (*) Using Regular Expressions (ignore case)
Conditions: Match All: Input: {HTTPS} Matches the Pattern: ^Off$
Redirect URL: https://sub1.domain.org/{REQUEST_URI}
现在,我尝试将请求的 URL 模式更改为:.*sub1.domain.org/.*
但 IIS7 中的正则表达式测试器说它不匹配https://sub1.domain.org
- 我不明白这一点。
我怎样才能保留 sub1.domain.org 的 http 到 https 的重写,但对 sub2.domain.org 完全不产生任何影响?
答案1
在我想要通过 访问https
并重写http
为 的特定站点的 web.config 中http
,我进行了如下设置:
<rewrite>
<rules>
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>