web-dev-qa-db-ja.com

ホストAngular app on IIS-Redirect to root and force HTTPS

IISでホストされているangularアプリケーションを取得しました。すべての要求をアプリケーションのルートにリダイレクトし、angular別のルートでは、次のように、URL書き換えルールを含むweb.configファイルを追加しました。

<configuration>
<system.webServer>
  <rewrite>
    <rules>
     <rule name="Angular Routes" stopProcessing="true">
         <match url=".*" />
       <conditions logicalGrouping="MatchAll">
         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
       </conditions>
       <action type="Rewrite" url="/" />
     </rule>
  </rules>
 </rewrite>
</system.webServer>
</configuration>

正常に動作します。ただし、アプリケーションにHTTPからHTTPSへのリダイレクトを強制する必要があります。これを行うには、次の投稿に示すように、新しいルールを追加します。 Angular 2-常にhttp://を使用する代わりにhttps://にリダイレクトします

HTTPSを強制するルール:

<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <clear />
            <rule name="Redirect to https" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
</configuration>

このルールも機能しますが、以前に定義したルートルールへのリダイレクトが無効になります。それで、誰かがこれらの2つのルールをどのように混合できるか、またはどちらの方法で両方の目的を達成できるかについてのアイデアがありますか?

12
D.B

代替ソリューションとして、angularプロジェクトのメインコントローラーに次のように直接httpsを強制しました(他の人に役立つ場合に投稿されています)。

import { Component, OnInit } from '@angular/core';
import { Location } from '@angular/common';
import { environment } from '../environments/environment';

 @Component({
 selector: 'vp-app-root',
  templateUrl: './app.component.html',
 styleUrls: ['./app.component.scss']
 })
export class AppComponent implements OnInit {
title = 'vp-app';
location: Location;
ngOnInit() {

if (environment.production) {
   if (location.protocol === 'http:') {
    window.location.href = location.href.replace('http', 'https');
   }
  }    
 }
}
10
D.B

HTTPSにリダイレクト&ルートにリダイレクト

まだweb.configソリューションを探している人は、既存のweb.configファイルのコードを次のコードに置き換えます。

<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
   <system.webServer>
    <rewrite>
      <rules>

          <!--START REDIRECT TO HTTPS-->
           <rule name="Redirect to https" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
            </rule>
            <!--END REDIRECT TO HTTPS-->

            <!--START REDIRECT TO ROOT-->
            <rule name="AngularJS" stopProcessing="true">
              <match url=".*" />
               <conditions logicalGrouping="MatchAll">
                  <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
               </conditions>
               <action type="Rewrite" url="/" />
            </rule>
           <!--END REDIRECT TO ROOT-->

         </rules>
      </rewrite>
    </system.webServer>
 </configuration>

注:IIS 6の場合、URL書き換え拡張機能をインストールして機能させる必要がある場合があります。

URL書き換え拡張機能は次の場所にあります。 https://www.iis.net/downloads/Microsoft/url-rewrite

5