web-dev-qa-db-fra.com

Hôte Angular app on IIS - Redirigez vers root et forcez HTTPS

J'ai une application angular hébergée dans IIS. Afin de rediriger toutes les demandes vers la racine de l'application et de permettre le routage angular pour gérer le différents itinéraires, j'ai ajouté un fichier web.config avec une règle de réécriture d'URL, comme suit:

<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>

Ça fonctionne bien. Cependant, je dois maintenant forcer l'application à rediriger de HTTP vers HTTPS. Pour ce faire, je peux ajouter une nouvelle règle comme le montre le message suivant: Angular 2 - toujours rediriger vers https: // au lieu d'utiliser http: //

Règle pour forcer 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>

Cette règle fonctionne également, mais elle rompt ma redirection vers la règle racine définie précédemment. Alors, quelqu'un a-t-il une idée Comment puis-je mélanger ces deux règles ensemble ou de quelle autre manière je peux atteindre les deux objectifs?

12
D.B

Comme solution alternative, j'ai fini par forcer https sur le contrôleur principal dans le projet angular directement, comme suit. (Publié dans le cas est utile pour quelqu'un d'autre)

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

REDIRIGER EN HTTPS ET REDIRIGER EN RACINE

Quelqu'un qui est toujours à la recherche d'une solution web.config, remplacez votre code de fichier web.config existant par le code suivant:

<?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>

Remarque: Pour IIS 6, vous devrez peut-être installer l'extension de réécriture d'URL pour le faire fonctionner.

Vous pouvez trouver l'extension de réécriture d'URL sur: https://www.iis.net/downloads/Microsoft/url-rewrite

5
Arun Kumar Saini