Comment utiliser le routeur réactif (createBrowserHistory) sur Microsoft IIS pour que le routage fonctionne?

J'utilise react-router (createBrowserHistory) pour mon application réactive.

Voici mon code de

var ReactDOM = require('react-dom') ; var ReactRouter = require('react-router'); var Router = ReactRouter.Router; var Route = ReactRouter.Route; var Link = ReactRouter.Link; var browserHistory = require('react-router'); var createBrowserHistory = require('history/lib/createBrowserHistory'); var CL = require('./page1/1.jsx'); var Validation = require('./page3/3.jsx'); var Infos = require('./page4/4.jsx'); var Confirm = require('./page7/7.jsx'); var Upload = require('./page8/8.jsx'); module.exports = ( <Router history={new createBrowserHistory()}> <Route path='/' component={CL}></Route> <Route path='/validation' component={Validation}></Route> <Route path='/infos' component={Infos}></Route> <Route path='/confirm' component={Confirm}></Route> <Route path='/upload' component={Upload}></Route> </Router> ) 

Wen a exécuté IIS sur local, je vais à localhost sur le navigateur, je peux obtenir un composant "CL" et montrer sur la page, cependant, si je vais à / validation, je vais obtenir

 Failed to load resource: the server respond with status of 404 (Not Found) 

Quelqu'un sait ce qu'il faut ajouter à IIS ou mon code js pour que ce routage fonctionne?

Je pense que vous parlez de réacteur-routeur ou de choses similaires sous la configuration sur iis 7 fonctionne pour moi

 <rules> <rule name="Rewrite Text Requests" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_METHOD}" pattern="^GET$" /> <add input="{HTTP_ACCEPT}" pattern="^text/html" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="/index.html" /> </rule> </rules> 

J'ai eu beaucoup de difficulté pour que je l'écris pour la prochaine personne: Préparez d'abord le fichier web.config (comme Bo Chen l'a mentionné).

  <system.webServer> <rewrite> <rules> <rule name="Rewrite Text Requests" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_METHOD}" pattern="^GET$" /> <add input="{HTTP_ACCEPT}" pattern="^text/html" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="/index.html" /> </rule> </rules> </rewrite> 

Cela trouvera toutes les demandes et réécrivez-le à /index.html place.

Vous devez donc avoir un index.html dans la racine de votre projet. Faites également attention à l' extension du fichier.

Il y a deux choses que vous pouvez faire …

  1. Ajoutez des chemins virtuels pour pointer vers votre dossier de spa pour chaque itinéraire.
  2. Utilisez le module de réécriture d'URL IIS. Il s'agit d'une longue discussion à l'utilisation de l'application SO, alors voici un article décrivant: http://weblogs.asp.net/owscott/rewrite-vs-redirect-what-s-the-difference

Une autre option consiste à utiliser une application au dessus d'IIS pour vous assurer d'avoir d'autres fonctionnalités qui pourraient être utiles, comme le framework ASP.NET avec MVC en plus. Vous pourriez avoir un itinéraire là-bas qui capture toutes les demandes qui ne sont pas spécifiquement mappées (comme / api / / contenu) et les acheminer vers le html de telle sorte que votre application React puisse la gérer. Les avantages sur les IIS purs dépendent vraiment de votre situation.

Voici ma configuration d'itinéraire pour ASP.NET Core, pour vous donner un exemple:

 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller}/{action}/{id?}", defaults: new {controller = "Home", action = "Index"}, constraints: new { controller = new NotEqualConstraint("api")}); routes.MapRoute("api", "api/{controller}/{action}/{id?}"); routes.MapRoute("React failover", "app/{*uri}", new {controller = "App", action = "Index"}, new {controller = new NotEqualConstraint("api")}); }); 

Une autre chose à noter: assurez-vous d'avoir l'extension de réécriture d'URL installée.

https://www.iis.net/downloads/microsoft/url-rewrite

Vous devrez peut-être faire un iisreset après l'installation.