Je souhaite activer le mode HTML5 pour mon application. J'ai mis le code suivant pour la configuration, comme indiqué ici :
return app.config(['$routeProvider','$locationProvider', function($routeProvider,$locationProvider) {
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix = '!';
$routeProvider.when('/', {
templateUrl: '/views/index.html',
controller: 'indexCtrl'
});
$routeProvider.when('/about',{
templateUrl: '/views/about.html',
controller: 'AboutCtrl'
});
Comme vous pouvez le voir, j'ai utilisé le $locationProvider.html5mode
et j'ai changé tous mes liens aung-href
pour exclure le /#/
.
Le problème
Pour le moment, je peux aller localhost:9000/
voir la page d'index et naviguer vers les autres pages comme localhost:9000/about
.
Cependant, le problème se produit lorsque j'actualise la localhost:9000/about
page. J'obtiens la sortie suivante:Cannot GET /about
Si je regarde les appels réseau:
Request URL:localhost:9000/about
Request Method:GET
Alors que si je vais d'abord sur localhost:9000/
puis cliquez sur un bouton qui accède à, /about
j'obtiens:
Request URL:http://localhost:9000/views/about.html
Ce qui rend la page parfaitement.
Comment puis-je activer angulaire pour obtenir la bonne page lorsque je rafraîchis?
la source
Réponses:
Des documents angulaires
La raison en est que lorsque vous visitez la page (
/about
), par exemple après une actualisation, le navigateur n'a aucun moyen de savoir que ce n'est pas une véritable URL, donc il va de l'avant et la charge. Cependant, si vous avez d'abord chargé la page racine et tout le code javascript, lorsque vous accédez à/about
Angular, vous pouvez y accéder avant que le navigateur n'essaie de frapper le serveur et de le gérer en conséquencela source
$routeProvider
et changer les chemins de chacun,templateUrl
par exemple detemplateUrl : '/views/about.html',
àtemplateUrl : 'example.com/views/about.html',
?Il y a peu de choses à configurer, donc votre lien dans le navigateur ressemblera
http://yourdomain.com/path
et ce sont votre configuration angulaire + côté serveur1) AngularJS
2) côté serveur, placez-le
.htaccess
dans votre dossier racine et collez-lePlus de choses intéressantes à lire sur le mode html5 dans angularjs et la configuration requise par environnement différent https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server -to-work-with-html5mode Cette question peut également vous aider à $ location / basculer entre html5 et le mode hashbang / réécriture de liens
la source
J'ai eu un problème similaire et je l'ai résolu en:
Utilisation
<base href="https://stackoverflow.com/index.html">
dans la page d'indexEn utilisant un middleware catch all route dans mon nœud / serveur Express comme suit (mettez-le après le routeur):
Je pense que cela devrait vous permettre d'être opérationnel.
Si vous utilisez un serveur apache, vous souhaiterez peut-être mod_rewrite vos liens. Ce n'est pas difficile à faire. Juste quelques changements dans les fichiers de configuration.
Tout cela suppose que html5mode soit activé sur angularjs. Maintenant. notez que dans angular 1.2, déclarer une URL de base n'est plus recommandé en fait.
la source
<base href="https://stackoverflow.com/">
et l'ajout du routage Express que vous avez suggéré. Merci beaucoup.<base href="https://stackoverflow.com/index.html">
?Solution pour BrowserSync et Gulp.
Depuis https://github.com/BrowserSync/browser-sync/issues/204#issuecomment-102623643
Première installation
connect-history-api-fallback
:Ajoutez-le ensuite à votre gulpfile.js:
la source
server: { ... }, port: 8100
-à- d. , Ajoutez simplement laserve
tâche à votre tâche de gulp par défaut (c.-à-d.gulp.task('default', ['sass', 'serve']);
), Puis vous pouvez exécuter l'application sans lesCannot GET ...
erreurs du navigateur lorsque vous actualisez la page en exécutantgulp
. Notez que l'exécution du serveur avecionic serve
rencontre toujours les erreurs.Vous devez configurer votre serveur pour tout réécrire dans index.html pour charger l'application:
https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#wiki-how-to-configure-your-server-to-work-with-html5mode
la source
try_files $uri $uri/ /index.php?...
lieu du nécessaireindex.html
. Merci pour le lien!J'ai écrit un middleware de connexion simple pour simuler la réécriture d'URL sur des projets de grognement. https://gist.github.com/muratcorlu/5803655
Vous pouvez utiliser comme ça:
la source
$routeProvider
?urlRewrite
pas d'avertissement défini lorsque j'essaie de l'exécuter, et j'ai du mal à trouver la bonne connexion avec la réécriture que je peux utiliser.Si vous êtes dans la pile .NET avec MVC avec AngularJS, voici ce que vous devez faire pour supprimer le '#' de l'URL:
Configurez votre href de base dans votre page _Layout:
<head> <base href="https://stackoverflow.com/"> </head>
Ensuite, ajoutez ce qui suit dans la configuration de votre application angulaire:
$locationProvider.html5Mode(true)
Ci-dessus supprimera "#" de l'URL mais l'actualisation de la page ne fonctionnera pas. Par exemple, si vous êtes dans "yoursite.com/about", l'actualisation de la page vous donnera un 404. Ceci est dû au fait que MVC ne connaît pas le routage angulaire et par modèle MVC il recherchera une page MVC pour «à propos» qui n'existe pas dans le chemin de routage MVC. La solution consiste à envoyer toutes les demandes de page MVC à une seule vue MVC et vous pouvez le faire en ajoutant une route qui capture toutes les URL
la source
Règle de réécriture d'URL IIS pour éviter l'erreur 404 après l'actualisation de la page en html5mode
Pour un fonctionnement angulaire sous IIS sous Windows
Routes NodeJS / ExpressJS pour éviter l'erreur 404 après l'actualisation de la page en html5mode
Pour un fonctionnement angulaire sous Node / Express
Plus d'informations sur: AngularJS - Activer l'actualisation de la page en mode HTML5 sans erreurs 404 dans NodeJS et IIS
la source
Comme d'autres l'ont mentionné, vous devez réécrire les itinéraires sur le serveur et les définir
<base href="https://stackoverflow.com/"/>
.Pour
gulp-connect
:npm install connect-pushstate
la source
J'utilise apache (xampp) sur mon environnement de développement et apache sur la production, ajoutez:
au .htaccess résoudre pour moi ce problème.
la source
Pour Grunt et Browsersync, utilisez connect-modrewrite ici
la source
npm install connect-modrewrite --save
2.require in gruntfile
3. copiez le serveur obj ci-dessusJ'ai résolu de
la source
Je réponds à cette question à partir de la question plus large:
Lorsque vous avez activé html5Mode, le caractère # ne sera plus utilisé dans vos URL. Le symbole # est utile car il ne nécessite aucune configuration côté serveur. Sans #, l'url semble beaucoup plus agréable, mais elle nécessite également des réécritures côté serveur. Voici quelques exemples:
Pour Express Rewrites avec AngularJS, vous pouvez résoudre ce problème avec les mises à jour suivantes:
et
et
la source
Je crois que votre problème concerne le serveur. La documentation angulaire concernant le mode HTML5 (au lien dans votre question) indique:
Côté serveur L'utilisation de ce mode nécessite une réécriture d'URL côté serveur, fondamentalement vous devez réécrire tous vos liens vers le point d'entrée de votre application (par exemple index.html)
Je pense que vous devrez configurer une réécriture d'URL de / à propos de /.
la source
Nous avons eu une redirection de serveur dans Express:
et nous rencontrions toujours des problèmes d'actualisation de page, même après avoir ajouté le
<base href="https://stackoverflow.com/" />
.Solution: assurez-vous que vous utilisez de vrais liens dans votre page pour naviguer; ne saisissez pas l'itinéraire dans l'URL ou vous obtiendrez une actualisation de la page. (erreur stupide, je sais)
:-P
la source
Enfin, j'ai eu un moyen de résoudre ce problème côté serveur car il ressemble plus à un problème avec AngularJs lui-même J'utilise 1.5 Angularjs et j'ai eu le même problème lors du rechargement de la page. Mais après avoir ajouté le code ci-dessous dans mon
server.js
fichier, c'est sauver ma journée, mais ce n'est pas une bonne solution ou pas un bon moyen.la source
J'ai trouvé un plugin Grunt encore meilleur, qui fonctionne si vous avez votre index.html et Gruntfile.js dans le même répertoire;
Après cela dans votre Gruntfile:
la source
la source
J'ai eu le même problème avec java + angular app généré avec JHipster . Je l'ai résolu avec Filter et la liste de toutes les pages angulaires dans les propriétés:
application.yml:
AngularPageReloadFilter.java
WebConfigurer.java
J'espère que ce sera utile pour quelqu'un.
la source
Navigateur Gulp + Sync:
Installez connect-history-api-fallback via npm, puis configurez votre tâche serve gulp
la source
Votre code côté serveur est JAVA, puis suivez les étapes ci-dessous
étape 1: Télécharger le fichier JAR urlrewritefilter Cliquez ici et enregistrez-le pour créer le chemin WEB-INF / lib
étape 2: Activer le mode HTML5 $ locationProvider.html5Mode (true);
étape 3: définir l'URL de base
<base href="https://stackoverflow.com/example.com/"/>
étape 4: copier et coller sur votre WEB.XML
étape 5: créer un fichier dans WEN-INF / urlrewrite.xml
la source
J'ai cette solution simple que j'utilise et ses travaux.
Dans App / Exceptions / Handler.php
Ajoutez ceci en haut:
Puis à l'intérieur de la méthode de rendu
la source
J'ai résolu le problème en ajoutant l'extrait de code ci-dessous dans le fichier node.js.
Remarque: lorsque nous actualisons la page, il recherchera l'API au lieu de la page angulaire (en raison de l'absence de balise # dans l'URL.). En utilisant le code ci-dessus, je redirige vers l'URL avec #
la source
Écrivez simplement une règle dans web.config
Dans l'index ajoutez ceci
cela fonctionne pour moi, vous avez peut-être oublié de définir Html5Mode app.config
la source