如何在IIS中运行emberJS应用程序?

时间:2014-08-25 08:05:45

标签: ember.js iis-7 ember-cli

我有一个使用Ember CLI构建的EmberJS应用程序。 为了部署我的应用程序,我在Ember CLI中使用了ember build --release命令,并将/dist文件夹中的输出复制到与IIS映射的文件夹中。 一切似乎都很好。当您在SPA内导航时,会更新URL,从Web服务等获取数据。但是,如果我尝试直接访问localhost/someurl,则会收到404 Not Found错误。我猜这是因为IIS 7中的路由,但我如何使用Ember路由工作呢?

3 个答案:

答案 0 :(得分:10)

我知道这个问题已经过时但是我找到了一个非常好的解决方案,使用IIS URL重写模块(https://www.iis.net/downloads/microsoft/url-rewrite)基本上模仿了apache的mod_rewrite。

基本上,您在web.config中定义重写规则,将您放在IIS目录中的dist / *文件放在一起,然后转到城镇。

这是我的web.config中的重写规则块。

var containingBoth = [];
function checkArrays(toCheck, toCheckAgainst){
 for(var i=0;i<toCheck.length;i+=1){
  for(var j=0;j<toCheckAgainst.length;j+=1){
    if (toCheck[i] === toCheckAgainst[j]) {
      containingBoth.push(toCheck[i]);
    }
   }
  }
 }

如果您删除IsDirectory检查,那么它仍将使用IIS的404用于坏目录。

这允许您在不使用/#/技术的情况下在IIS中托管ember应用程序。

答案 1 :(得分:5)

让它在IIS上运行的最简单方法,就像其他路由框架在像Sammy.js这样在IIS中工作的方式,就是在网址中包含一个哈希,如http://0.0.0.0:4200/#/your-route/

在EmberJS中,这可以通过修改应用程序路由器来实现:

var Router = Ember.Router.extend({
  location: 'hash'
});

在您的情况下,由于您使用的是ember-cli,因此修改了environment.config文件:

var ENV = {
   ...
   locationType: 'hash'
   ... };

答案 2 :(得分:1)

我正在ASP.Net WebApi使用Identity我还想避免为不存在的文件返回index.html,所以我这样做了:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="to-ember" stopProcessing="true">
                <match url="^/?(.+\.[a-z0-9]+$|token$|api/)" ignoreCase="true" negate="true"/>
                <action type="Rewrite" url="index.html"/>
            </rule>
        </rules>
    </rewrite>
</system.webServer>