这个重定向规则有什么问题?
What is wrong with this redirect rule?
我正在使用下面的代码在我的 web.config 文件中创建重定向规则,该文件位于 Windows 服务器托管的网站的根目录中:
<rewrite>
<rules>
<clear />
<rule name="Redirect https" enabled="true" stopProcessing="true" patternSyntax="ECMAScript">
<match url=".*cashpreview\.com\.br.*" ignoreCase ="true" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
该规则适用于地址 http://www.cashpreview.com.br/cashpreview/cashbr.htm 但不适用于
http://www.cashpreview.com.br/cashpreview/janelas.htm。如果我尝试访问第一个地址,“https”会替换“http”,但第二个地址不会发生同样的情况。我需要在正则表达式中写域,因为我有多个域共享同一个 Web 目录,只有它安装了 SSL。有人知道是什么导致了规则的这种奇怪行为吗?
现在,我发现了我的错误。我不知道匹配元素的参数 url 仅包含 url 相对于 web.config 文件所在目录的部分。因此,域永远不会是 url 的一部分。由于我有多个域共享同一个 Web 目录,因此我添加了一个新条件来检查 {HTTP_HOST} 是否为我安装了 SSL 的唯一域。因为我在站点中有 asp 文件并且我使用了包含查询字符串的 {REQUEST_URI},所以我关闭了 appendquerystring 属性。我现在的代码如下:
<rewrite>
<rules>
<clear />
<rule name="Redirect https" enabled="true" stopProcessing="true" patternSyntax="ECMAScript">
<match url=".*" ignoreCase ="true"/>
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
<add input="{HTTP_HOST}" pattern=".*cashpreview\.com\.br" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false"/>
</rule>
</rules>
</rewrite>
这种有时一切顺利的情况仅适用于我浏览器中缓存的数据。使用代理,那个案例也没有像我以前那样工作。
我正在使用下面的代码在我的 web.config 文件中创建重定向规则,该文件位于 Windows 服务器托管的网站的根目录中:
<rewrite>
<rules>
<clear />
<rule name="Redirect https" enabled="true" stopProcessing="true" patternSyntax="ECMAScript">
<match url=".*cashpreview\.com\.br.*" ignoreCase ="true" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
该规则适用于地址 http://www.cashpreview.com.br/cashpreview/cashbr.htm 但不适用于 http://www.cashpreview.com.br/cashpreview/janelas.htm。如果我尝试访问第一个地址,“https”会替换“http”,但第二个地址不会发生同样的情况。我需要在正则表达式中写域,因为我有多个域共享同一个 Web 目录,只有它安装了 SSL。有人知道是什么导致了规则的这种奇怪行为吗?
现在,我发现了我的错误。我不知道匹配元素的参数 url 仅包含 url 相对于 web.config 文件所在目录的部分。因此,域永远不会是 url 的一部分。由于我有多个域共享同一个 Web 目录,因此我添加了一个新条件来检查 {HTTP_HOST} 是否为我安装了 SSL 的唯一域。因为我在站点中有 asp 文件并且我使用了包含查询字符串的 {REQUEST_URI},所以我关闭了 appendquerystring 属性。我现在的代码如下:
<rewrite>
<rules>
<clear />
<rule name="Redirect https" enabled="true" stopProcessing="true" patternSyntax="ECMAScript">
<match url=".*" ignoreCase ="true"/>
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
<add input="{HTTP_HOST}" pattern=".*cashpreview\.com\.br" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false"/>
</rule>
</rules>
</rewrite>
这种有时一切顺利的情况仅适用于我浏览器中缓存的数据。使用代理,那个案例也没有像我以前那样工作。