Iis

角度和 IIS。重定向到 HTTPS,保留完整的 URL

  • December 18, 2020

對於需要託管在 IIS 伺服器上的 Angular 應用程序,我必須將完整的 URL 從 HTTP 重定向到 HTTPS。

我創建了以下規則,但它不起作用,它只適用於主域(如http://www.somedomain.com>,它重定向就好了,但使用<http://www.somedomain.com/route

這是我的規則。我究竟做錯了什麼?

&lt;rules&gt;
   &lt;rule name="HTTP to HTTPS redirect" stopProcessing="true"&gt;
     &lt;match url="(.*)" /&gt;
     &lt;conditions&gt;
       &lt;add input="{HTTPS}" pattern="off" ignoreCase="true" /&gt;
     &lt;/conditions&gt;
     &lt;action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /&gt;
   &lt;/rule&gt;
   &lt;rule name="Angular Routes" stopProcessing="true"&gt;
     &lt;match url=".*" /&gt;
     &lt;conditions logicalGrouping="MatchAll"&gt;
       &lt;add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /&gt;
       &lt;add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /&gt;
     &lt;/conditions&gt;
     &lt;action type="Rewrite" url="./index.html" /&gt;
   &lt;/rule&gt;
&lt;/rules&gt;

這個想法是將http://www.somedomain.com/route/something>或<http://somedomain.com/route/something>重定向到<https://www.somedomain.com/route/something

有幾種方法可以進行相同的重定向。如果您使用 url=“https://{HTTP_HOST}/{R:1}” 必須添加 appendQueryString=“true”,否則將不會附加 URI 路徑。

所以配置應該如下所示:

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;configuration&gt;
   &lt;system.webServer&gt;
       &lt;rewrite&gt;
           &lt;rules&gt;
               &lt;rule name="Redirect to HTTPS" enabled="true" stopProcessing="true"&gt;
                   &lt;match url="(.*)" /&gt;
                   &lt;conditions&gt;
                       &lt;add input="{HTTPS}" pattern="^OFF$" /&gt;
                   &lt;/conditions&gt;
                   &lt;action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" /&gt;
               &lt;/rule&gt;
           &lt;/rules&gt;
       &lt;/rewrite&gt;
   &lt;/system.webServer&gt;
&lt;/configuration&gt;

但是我通常使用另一個帶有 301 重定向的規則,在某些情況下瀏覽器可以更好地處理它。在這種情況下,您必須使用另一種類型的 uri:url=“https://{HTTP_HOST}{REQUEST_URI}”

&lt;configuration&gt;
&lt;system.webServer&gt;
   &lt;rewrite&gt;
    &lt;rules&gt;
      &lt;rule name="HTTPS force" enabled="true" stopProcessing="true"&gt;
      &lt;match url="(.*)" /&gt;
      &lt;conditions&gt;
       &lt;add input="{HTTPS}" pattern="^OFF$" /&gt;
      &lt;/conditions&gt;
      &lt;action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" /&gt;
    &lt;/rule&gt;
   &lt;/rules&gt;
  &lt;/rewrite&gt;
&lt;/system.webServer&gt;
&lt;/configuration&gt;

引用自:https://serverfault.com/questions/1046607