2014-09-03 16 views
6

Tôi có ứng dụng AngularJS sử dụng Viết lại URL để liên kết. viết lại quy tắc của tôi trông giống như:Quy tắc ghi lại URL IIS

<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> 

tôi tìm thấy giải pháp này trên SO: How do I configure IIS for URL Rewriting an AngularJS application in HTML5 mode? và thực hiện một sửa đổi để cho phép API của tôi để đi qua.

Về cơ bản, tôi muốn chuyển hướng tất cả các yêu cầu của mình tới Default.cshtml các lệnh gọi EXCEPT tới API web của tôi. Điều này làm việc tuyệt vời khi tôi tải ứng dụng trên URL cơ sở như: localhost/myapp. Tuy nhiên, nếu tôi tải lại trang web trên một tuyến đường góc cạnh như: localhost/myapp/dashboard nó vẫn thất bại nói:

<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> 

Tôi có một công việc xung quanh nơi tôi đã làm:

<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> 

và nó làm việc tốt. Bất kỳ ý tưởng làm thế nào tôi có thể sử dụng một giải pháp sạch hơn ở trên và vẫn thực hiện việc viết lại?

Trả lời

6

Tôi cần thay đổi mẫu và thay đổi {REQUEST_FILE} thành {REQUEST_URI} ở một vài nơi. Xem bản demo của tôi tại đây:

<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

mẫu tín hiệu đó là phao cứu sinh. Đã phải vật lộn trong vài giờ với điều đó. Một điểm khác cho người dùng trong tương lai là nếu bạn chỉ định đường dẫn gốc của riêng bạn trong tệp startup.cs app.start(), bạn sẽ gặp sự cố. Tôi đã phải loại bỏ đường dẫn gốc của tôi "/ www" và chỉ để lại tất cả để ánh xạ signalR. –

+0

Tôi yêu bạn giao phối! Patter signalr của bạn là một phao cứu sinh² Chỉ cần thay đổi nó để Admin (ứng dụng thư mục của tôi) và làm việc như một say mê. Tôi không biết điều này có nghĩa là gì, vì tôi chỉ là một nhà thiết kế lmao, nhưng nó hoạt động. Cảm ơn. –

Các vấn đề liên quan