Le calendrier publié (.ics) renvoie HTTP 500 pour les applications de calendrier

S’applique à
Exchange Server SE Exchange Server 2019 Exchange Server 2016

Symptômes

Après avoir installé le correctif de sécurité d’août 2026 (Exchange Server SE, build 15.2.2562.46), les abonnements à un calendrier Exchange publié anonymement cessent de s’actualiser. L’application abonnée signale une erreur serveur et l’URL renvoie HTTP 500.

Résolution

Pour résoudre ce problème, installez la mise à jour de sécurité suivante ou des mises à jour ultérieures :

Remarque

  • Si la solution de contournement décrite ci-dessous a été implémentée, supprimez-la en suivant les étapes de restauration décrites dans la procédure.

Solution de contournement

Ajoutez une règle de réécriture d’URL au site Exchange Back End dans IIS. La règle s’ajoute layout=premium aux demandes .ics sous /owa/calendar/. Cette action sélectionne le chemin d’accès au code pris en charge et restaure le flux.

Important

Appliquer la règle au site Exchange principal uniquement. Ne l’appliquez pas au « site web par défaut » et ne l’appliquez pas au niveau du serveur, où il serait évalué pour chaque site du serveur.

Remarque

Les deux méthodes nécessitent le module de réécriture d’URL IIS. Le programme d’installation d’Exchange Server n’installe pas le module. Pour vérifier si le module est présent dans le cadre de la case activée, exécutez Test-Path "$env:windir\System32\inetsrv\rewrite.dll". Si le module n’est pas installé et que vous ajoutez une <rewrite> section à applicationHost.config, IIS renvoie « HTTP 500.19 » pour l’ensemble du site Exchange back-end, et pas seulement pour le chemin d’accès au calendrier. Le modèle de règle correspond à n’importe quelle requête .ics sous /owa/calendar/. Par conséquent, il couvre également les flux de reachcalendar.ics planification publiés, qui échouent de la même manière. Utilisez l’une ou l’autre méthode dans les sections suivantes. Étant donné que les deux méthodes configurent la même règle dans la même étendue, choisissez celle qui convient à votre processus de modification.

Méthode A : Gestionnaire IIS

  1. Ouvrez le Gestionnaire des services Internet (IIS). Développez le serveur, développez Sites, sélectionnez Exchange Back End, puis double-cliquez sur Réécriture d’URL.

    Arborescence de site

  2. Dans le volet Actions à droite, sélectionnez Ajouter une ou plusieurs règles..., sélectionnez Règle vide sous Règles de trafic entrant, puis sélectionnez OK.

    Ajouter une règle

  3. Entrez le nom et renseignez la section Faire correspondre l’URL avec les valeurs suivantes.

    Champ Valeur
    Name (Nom) calendrier publié dans OWA Forcer la disposition Premium
    URL demandée Correspond au modèle
    Using Expressions régulières
    Modèle ^owa/calendar/.+\.ics$
    Ignorer la casse sélectionné

    URL_correspondance

  4. Développez Conditions, cliquez sur Ajouter... et complétez la boîte de dialogue avec les valeurs suivantes. Cette condition laisse les requêtes telles quelles si elles comportent déjà un paramètre de disposition.

    Champ Valeur
    Entrée de condition {QUERY_STRING}
    Vérifier si la chaîne d’entrée Ne correspond pas au modèle
    Modèle (^|&)layout=

    Condition d’ajout

    Une fois que vous avez cliqué sur OK, la condition apparaît dans la liste, avec le regroupement logique restant dans le champ Correspondre tout.

    Liste des conditions

  5. Développez Action et terminez-la avec les valeurs suivantes.

    Champ Valeur
    Type d’action Réécrire
    URL de réécriture {R:0}?layout=premium&{QUERY_STRING}
    Ajouter une chaîne de requête Désactivé
    Arrêter le traitement des règles suivantes sélectionné

    Actions

    Important

    Désactivez la case à cocher Ajouter une chaîne de requête . Si vous laissez la case à cocher sélectionnée, IIS ajoute la chaîne de requête d’origine une deuxième fois. Cela entraîne des paramètres en double dans la demande.

    Dans le volet Actions , sélectionnez Appliquer pour enregistrer la règle.

  6. Vérifiez que la règle est répertoriée dans la liste Réécriture d’URL . Développez-la pour afficher la condition.

    Liste de règles

Aucun recyclage de pool d’applications n’est requis. IIS recharge automatiquement la configuration.

Remarque

En fonction des paramètres de délégation de fonctionnalités du serveur, le Gestionnaire des services Internet (IIS) écrit la règle dans applicationHost.config ou dans le fichier web.config racine du site Exchange Back End (%ExchangeInstallPath%\ClientAccess\web.config). Les deux emplacements sont valides. Gardez cela à l’esprit lorsque vous vérifierez ou supprimerez la règle ultérieurement.

Méthode B : Modifier applicationHost.config

Utilisez cette méthode si vous préférez déployer la configuration en tant que modification de fichier, par exemple via un outil de gestion de la configuration. Fichier :C:\Windows\System32\inetsrv\config\applicationHost.config

  1. Sauvegardez le fichier.
    Copy-Item C:\Windows\System32\inetsrv\config\applicationHost.config "C:\Windows\System32\inetsrv\config\applicationHost.config.bak-$(Get-Date -f yyyyMMdd-HHmmss)"
    
  2. Localisez l’élément <location path="Exchange Back End"> . S’il n’existe pas, créez-le à la racine du fichier, avec les autres <location> éléments. Ajoutez le <rewrite> bloc à l’intérieur <system.webServer>:
    <location path="Exchange Back End">
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="OWA published calendar force premium layout" stopProcessing="true">
              <match url="^owa/calendar/.+\.ics$" />
              <conditions>
                <add input="{QUERY_STRING}" pattern="(^|&amp;)layout=" negate="true" />
              </conditions>
              <action type="Rewrite" url="{R:0}?layout=premium&amp;{QUERY_STRING}" appendQueryString="false" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </location>
    

Important

Conservez l’attribut appendQueryString="false" . L’attribut par défaut est true. Par conséquent, si vous l’omettez, IIS ajoute la chaîne de requête d’origine une deuxième fois. Cela entraîne des paramètres en double dans la demande.

Important

Vous devez écrire l’esperluette comme &amp; dans ce fichier. Dans le Gestionnaire des services Internet (IIS), vous tapez un fichier .& Toutefois, comme applicationHost.config est en XML, le caractère doit être codé. Un littéral & ici fait qu’IIS retourne « HTTP 500.19 » pour l’ensemble du site, et pas seulement pour le chemin d’accès du calendrier. Enregistrez le fichier. IIS applique automatiquement la modification.

Vérification

Exécutez la commande suivante à partir d’un ordinateur extérieur à l’organisation, sur le même chemin réseau que celui utilisé par les abonnés. Remplacez l’URL par l’adresse de votre calendrier publié. Le -A paramètre présente la demande sous la forme d’une application de calendrier plutôt que d’un navigateur, ce qui reproduit le problème.

curl.exe -s -o NUL -D - -A "iOS/26.6.1 (23G83) dataaccessd/1.0" "https://mail.contoso.com/owa/calendar/{id}/{token}/calendar.ics"

Avant la modification :

HTTP/1.1 302 Found
Content-Type: text/html; charset=utf-8
Location: /owa/calendar/auth/errorFE.aspx?httpCode=500
Set-Cookie: OwaLight=; expires=Mon, 24-Aug-2026 13:47:06 GMT; path=/
Content-Length: 161

La demande est redirigée vers une page d’erreur et aucune donnée de calendrier n’est renvoyée. Après la modification :

HTTP/1.1 200 OK
Content-Type: text/calendar; charset=utf-8
Content-Length: 1780

Vérifiez les valeurs HTTP/1.1 200 OK et Content-Type: text/calendar. L’en-tête Set-Cookie: OwaLight= est présent uniquement lorsque la demande échoue. Par conséquent, son absence confirme que la règle est en vigueur. Pour afficher le contenu du calendrier, supprimez -o NUL -D - de la commande. Une réponse de travail commence par BEGIN:VCALENDAR.

curl.exe -s -A "iOS/26.6.1 (23G83) dataaccessd/1.0" "https://mail.contoso.com/owa/calendar/{id}/{token}/calendar.ics"

Pour vérifier que IIS lui-même voit la règle et pour déterminer le fichier qui la contient, exécutez les commandes suivantes sur le serveur :

& "$env:windir\System32\inetsrv\appcmd.exe" list config "Exchange Back End" -section:system.webServer/rewrite/rules
Select-String -Path "$env:windir\System32\inetsrv\config\applicationHost.config" -Pattern 'OWA published calendar'
Select-String -Path "$env:ExchangeInstallPath\ClientAccess\web.config" -Pattern 'OWA published calendar' -ErrorAction SilentlyContinue

Vérifiez également que le calendrier publié s’ouvre toujours dans un navigateur et que la connexion normale /owa/ n’est pas affectée.

Restauration

Pour supprimer la solution de contournement, supprimez la règle dans le Gestionnaire des services Internet (IIS) ou supprimez le <rewrite> bloc du fichier qui la contient. Cette modification ne nécessite pas de redémarrage. Vérifiez les deux emplacements, car la règle peut être stockée dans l’un ou l’autre :

  • C:\Windows\System32\inetsrv\config\applicationHost.config
  • %ExchangeInstallPath%\ClientAccess\web.config Si vous supprimez la règle d’un fichier alors qu’une copie reste dans l’autre, la réécriture reste active.
  • Appliquer la règle sur chaque serveur qui gère le calendrier publié. Cette règle s’applique à chaque serveur IIS et non à l’échelle de l’organisation. Un équilibreur de charge distribue les demandes d’abonnement à tous les membres du tableau. Par conséquent, un serveur que vous manquez continue à renvoyer un message « HTTP 500 ». L’échec intermittent qui en résulte est considérablement plus difficile à diagnostiquer qu’un échec constant. Vérifiez la règle sur chaque serveur. Ne présumez pas qu’il s’applique partout.
  • Revérifiez après chaque mise à jour cumulative et de sécurité. La configuration IIS au niveau du site survit normalement aux mises à jour Exchange, mais cette condition n’est pas garantie. Incluez un case activée de cette règle dans votre procédure de mise à jour Exchange afin que la solution de contournement ne disparaisse pas lors d’une prochaine mise à jour.

Remarque

Si vous avez créé la règle IIS dans le cadre de la solution de contournement, supprimez-la à l’aide du Gestionnaire des services Internet (IIS) ou supprimez le bloc correspondant <rewrite> du fichier de configuration dans lequel il est défini. Aucun redémarrage n’est requis. Vérifiez les deux emplacements suivants pour vous assurer que la règle a été supprimée :

C:\Windows\System32\inetsrv\config\applicationHost.config %ExchangeInstallPath%\ClientAccess\web.config