How to run emberJS application in IIS?

☆樱花仙子☆ 提交于 2019-12-01 03:38:50
Chris Rice

I know this question is old but i found a very nice solution to the problem using the IIS URL Rewrite module (https://www.iis.net/downloads/microsoft/url-rewrite) which basically mimic's apache's mod_rewrite.

Basically you define the rewrite rules in a web.config you place along side the dist/* files you dropped into an IIS directory and then go to town.

Here is my rewrite rule block in my web.config.

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="CatchAll For Ember" patternSyntax="Wildcard" stopProcessing="true">
                    <match url="*" />
                    <action type="Rewrite" url="index.html" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

If you remove the IsDirectory check then it will still use IIS's 404 for bad directories.

This allows you to host ember applications in IIS without using the /#/ technique.

The easiest way to get get this to work on IIS, and similar to the way other route frameworks work in IIS like Sammy.js, is to include a hash in the url like this http://0.0.0.0:4200/#/your-route/

In EmberJS, this is achieved by modifying the application router:

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

In your case, since you're using ember-cli, you modify the environment.config file:

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

I'm using ASP.Net WebApi with Identity and I also wanted to avoid returning index.html for non-existent files so I did this:

<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>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!