J'ai le projet d'amorçage AngularJS et j'ai ajouté
$locationProvider.html5Mode(true).hashPrefix('!');
dans le fichier app.js. Je souhaite configurer IIS 7 pour acheminer toutes les demandes vers
http://localhost/app/index.html
pour que cela fonctionne pour moi. Comment puis-je faire cela?
Mettre à jour:
Je viens de découvrir, télécharger et installer le module de réécriture d'URL IIS , en espérant que cela rendra facile et évident d'atteindre mon objectif.
Mise à jour 2 :
Je suppose que cela résume ce que j'essaie de réaliser (tiré de la documentation AngularJS Developer ):
L'utilisation de ce mode nécessite une réécriture d'URL côté serveur, en gros vous devez réécrire tous vos liens vers le point d'entrée de votre application (par exemple index.html)
Mise à jour 3:
Je travaille toujours là-dessus et je me rends compte que je ne dois PAS rediriger (avoir des règles qui réécrivent) certaines URL telles que
http://localhost/app/lib/angular/angular.js
http://localhost/app/partials/partial1.html
donc tout ce qui se trouve dans les répertoires css, js, lib ou partials n'est pas redirigé. Tout le reste devra être redirigé vers app / index.html
Quelqu'un sait comment y parvenir facilement sans avoir à ajouter une règle pour chaque fichier?
Mise à jour 4:
J'ai 2 règles entrantes définies dans le module de réécriture d'URL IIS. La première règle est:
La deuxième règle est:
Maintenant, lorsque je navigue vers localhost / app / view1, il charge la page, mais les fichiers de support (ceux des répertoires css, js, lib et partials) sont également réécrits sur la page app / index.html - donc tout est à venir retour en tant que page index.html quelle que soit l'URL utilisée. Je suppose que cela signifie que ma première règle, qui est censée empêcher ces URL d'être traitées par la deuxième règle, ne fonctionne pas… aucune idée? ...n'importe qui? ...Je me sens si seul... :-(
la source
app/index.html
et neapp/
pas déclencher explicitement la page qui sert AngularJS. J'ai perdu 2 heures de ma vie avant de le découvrir. :-)Réponses:
J'écris une règle dans web.config après avoir
$locationProvider.html5Mode(true)
été définiapp.js
.Hope, aide quelqu'un.
Dans mon index.html j'ai ajouté ceci à
<head>
N'oubliez pas d'installer IIS URL Rewrite sur le serveur.
De plus, si vous utilisez l'API Web et IIS, cela fonctionnera si votre API est à en
www.yourdomain.com/api
raison de la troisième entrée (troisième ligne de condition).la source
Les règles entrantes IIS comme indiqué dans la question fonctionnent. J'ai dû vider le cache du navigateur et ajouter la ligne suivante en haut de ma
<head>
section de la page index.html:C'est parce que j'ai plus d'une application dans localhost et que les demandes à d'autres partiels ont donc été prises au
localhost/app/view1
lieu delocalhost/myApplication/app/view1
Espérons que cela aide quelqu'un!
la source
Dans mon cas, j'ai continué à obtenir un 403.14 après avoir configuré les règles de réécriture correctes. Il s'avère que j'avais un répertoire qui portait le même nom que l'une de mes routes URL. Une fois que j'ai supprimé la règle de réécriture IsDirectory, mes itinéraires fonctionnaient correctement. Existe-t-il un cas où la suppression de la négation du répertoire peut causer des problèmes? Je ne peux penser à aucun dans mon cas. Le seul cas auquel je puisse penser est si vous pouvez parcourir un répertoire avec votre application.
la source
Le problème avec seulement ces deux conditions:
est qu'ils ne fonctionnent que tant que le
{REQUEST_FILENAME}
existe physiquement sur le disque . Cela signifie qu'il peut y avoir des scénarios où une requête pour une vue partielle incorrectement nommée renverrait la page racine au lieu d'un 404, ce qui entraînerait le chargement double de angular (et dans certains scénarios, cela peut provoquer une boucle infinie désagréable).Ainsi, certaines règles de «secours» sûres seraient recommandées pour éviter ces problèmes difficiles à résoudre:
ou une condition qui correspond à n'importe quelle fin de fichier :
la source
Le moyen le plus simple que j'ai trouvé est simplement de rediriger les demandes qui déclenchent 404 vers le client. Cela se fait en ajoutant un hashtag même lorsqu'il
$locationProvider.html5Mode(true)
est défini.Cette astuce fonctionne pour les environnements avec plus d'applications Web sur le même site Web et nécessitant des contraintes d'intégrité d'URL (authentification externe EG). Voici comment faire étape par étape
index.html
Réglez l'
<base>
élément correctementweb.config
Redirigez d'abord 404 vers une page personnalisée, par exemple "Accueil / Erreur"
Contrôleur domestique
Implémentez une
ActionResult
entrée simple à «traduire» dans une route côté client.C'est la manière la plus simple.
Il est possible (conseillé?) D'améliorer la fonction d'erreur avec une logique améliorée pour rediriger 404 vers le client uniquement lorsque l'URL est valide et laisser le 404 se déclencher normalement lorsque rien ne sera trouvé sur le client. Disons que vous avez ces routes angulaires
Il est judicieux de rediriger l'URL vers le client uniquement lorsqu'elle commence par "/ Nouveau" ou "/ Afficher /"
Ceci n'est qu'un exemple de logique améliorée, bien sûr, chaque application Web a des besoins différents
la source
J'ai essayé de déployer une simple application Angular 7 sur une application Web Azure. Tout a bien fonctionné, jusqu'au moment où vous avez actualisé la page. Ce faisant, me présentait un contenu déplacé par erreur 500. J'ai lu à la fois sur la documentation Angular et dans quelques bons forums, que j'ai besoin d'ajouter un fichier web.config à ma solution déployée et de m'assurer que la règle de réécriture revient au fichier index.html. Après des heures de frustration et de tests d'essais et d'erreurs, j'ai trouvé que l'erreur était assez simple: ajouter une balise autour du balisage de mon fichier.
la source
J'ai eu un problème similaire avec Angular et IIS lançant un code d'état 404 sur l'actualisation manuelle et j'ai essayé la solution la plus votée, mais cela n'a pas fonctionné pour moi. Également essayé un tas d'autres solutions devant faire face à WebDAV et changer de gestionnaire et aucune n'a fonctionné.
Heureusement, j'ai trouvé cette solution et cela a fonctionné (j'ai retiré des pièces dont je n'avais pas besoin). Donc, si aucune des solutions ci-dessus ne fonctionne pour vous ou même avant de les essayer, essayez ceci et voyez si cela résout votre problème de déploiement angulaire sur iis.
Ajoutez l'extrait de code à votre webconfig dans le répertoire racine de votre site. D'après ce que je comprends, il supprime le code d'état 404 de tout héritage (applicationhost.config, machine.config), puis crée un code d'état 404 au niveau du site et redirige vers la page d'accueil en tant que page 404 personnalisée.
la source