2014-09-03 198 views
6

我有一個AngularJS應用程序利用URL重寫進行鏈接。我重寫規則是這樣的:IIS URL重寫規則

<rewrite> 
<rules> 
    <rule name="MainRule" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="Pattern" pattern="^api/(.*)" negate="false" /> 
    </conditions> 
    <action type="Rewrite" url="Default.cshtml" /> 
    </rule> 
</rules> 

我發現SO此解決方案:How do I configure IIS for URL Rewriting an AngularJS application in HTML5 mode?並提出一個修改,讓我的API通過。

本質上,我想將我的所有請求重定向到Default.cshtml除了調用我的Web API。當我在基礎URL上加載應用程序時,此功能非常棒:localhost/myapp。不過,如果我重新加載像角路線的頁面:localhost/myapp/dashboard失敗說:

<Error><Message>No HTTP resource was found that matches the request URI 'http://localhost/myapp/dashboard'.</Message> 
<MessageDetail>No type was found that matches the controller named 'dashboard'.</MessageDetail></Error> 

我周圍的工作我做其中:

<rewrite> 
    <rules> 
    <rule name="Default" stopProcessing="true"> 
     <match url="^(?!lib|api|dist|assets|app/|bower|common|main|signalr|templates|bower_components/).*" /> 
     <action type="Rewrite" url="Default.cshtml" /> 
    </rule> 
    </rules> 
</rewrite> 

它工作得很好。任何想法如何我可以利用上面的清潔解決方案,仍然完成重寫?

回答

6

我需要更改模式並在幾個位置將{REQUEST_FILE}更改爲{REQUEST_URI}。看到我的演示在這裏:

<rewrite> 
    <rules> 
    <rule name="MainRule" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     <add input="{REQUEST_URI}" matchType="Pattern" pattern="api/(.*)" negate="true" /> 
     <add input="{REQUEST_URI}" matchType="Pattern" pattern="signalr/(.*)" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="Default.cshtml" /> 
    </rule> 
    </rules> 
</rewrite> 
+0

信號模式是一個救生員。因此而掙扎了幾個小時。未來用戶的另一點是,如果您在startup.cs app.start()中指定了自己的根路徑,那麼您將遇到問題。我不得不刪除我的根路徑「/ www」,只留下一切信號R映射。 – 2015-08-11 01:27:54

+0

我愛你隊友!你的信號模式是一個救星²只需將其更改爲管理員(我的文件夾應用程序),並像魅力一樣工作。我不知道這是什麼意思,因爲我只是一個設計師lmao,但它的工作。所以謝謝。 – 2017-10-10 19:55:35