2017-05-04 42 views
3

我有一個組件的簡單應用程序,它需要來自url的某些參數。只有一個在申請途徑:Angular 2託管在IIS上:HTTP錯誤404

const appRoutes: Routes = 
         path: 'hero/:userId/:languageId',component: HeroWidgetComponent }]; 

在中的index.html,我有這樣的標題<base href="/">

我使用的WebPack和運行應用程序的開發環境不錯,瀏覽網址時:http://localhost:4000/hero/1/1

但是,在構建生產應用程序並獲取分發文件時,然後將其託管在IIS上。

HTTP Error 404.0 - Not Found 
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable. 

應用程序工作正常,如果我刪除所有的路由,只是瀏覽:http:localhost:4200上的IIS嘗試瀏覽時相同的URL我收到以下錯誤。

+1

你'IIS'服務器需要讓所有的角路由重定向到'index.html'正確配置(或HTML文件,其中角應用被觸發)。不幸的是,我不是'IIS'服務器專家,所以我不能給你一個真正的答案如何做到這一點。 – tftd

回答

6

我們必須通過添加重寫規則使IIS回退到index.html。

步驟1: 安裝IIS URL Rewrite模塊

第2步: 添加重寫規則web.config中

<?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <system.webServer> 
     <rewrite> 
      <rules> 
      <rule name="AngularJS Routes" stopProcessing="true"> 
       <match url=".*" /> 
       <conditions logicalGrouping="MatchAll"> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="/" /> 
      </rule> 
      </rules> 
     </rewrite> 
     </system.webServer> 
    </configuration> 
+0

我在Godaddy上託管。我遵循這一點,但不必安裝IIS URL重寫,它只是工作。 – mapussah

+0

@mapussah,可能是因爲該模塊已安裝。 – Coding

+0

嗨,我遵循同樣的步驟,但它仍然會在我的本地Iis中發生404錯誤。我在回答中從給定的鏈接下載了URL重寫,執行後說已安裝。你能分享我失蹤的內容嗎?我使用Angular 4,@ angular/cli,C#Web API,VS 2015開發應用程序。 –