2012-11-27 82 views
4

與AngularJS HTML5Mode工作,甚至試圖我在另一個問題中發現的信息:配置IIS URL重寫了AngularJS HTML5Mode模塊仍然沒有工作我已搜查在發現了一些信息上配置IIS URL重寫模塊

How do I configure IIS for URL Rewriting an AngularJS application in HTML5 mode?

我在上面的鏈接中發現的問題中對我的IIS進行了更改,並在訪問根網站(即http:// localhost/appname /)時設置基本URL和網站。我所有的觀點和路由都可以正常工作。

但是;當我嘗試在新標籤頁或瀏覽器窗口中訪問特定的URL(即http:// localhost/appname/about)時,我得到了404。是否還有其他東西丟失?

我正在運行安裝了URL重寫模塊的Windows 7,IIS 7。

**我不得不將協議空間分配,以允許接受示例URL。

+0

我建議使用Charles或Dev Tools查看從.htaccess返回的實際標頭。它將顯示服務器試圖提供的URL。然後嘗試直接點擊該網址。我的直覺是,「真實」的網址被破壞或者重寫不正確。 – Sharondio

+0

我使用Fiddler來觀察直接URL請求中的響應,我對實際鏈接進行了實際的鏈接,當我點擊這些鏈接時,我在響應中獲得了404。我還觀看了這些請求,當我從根開始點擊時發現請求是針對部分(即localhost/app/partials/app.html),而不是URL(localhost/app/index.html)中的內容或只是本地主機/應用程序/) – miguelfeliciano

+0

該請求顯示了我在我的路徑中我的templateUrl路徑,而不是使用路徑值。 – miguelfeliciano

回答

3

安裝這個擴展:https://www.iis.net/downloads/microsoft/url-rewrite

這system.webServer

下添加到web.config中
<rewrite> 
    <rules> 
    <clear />   
    <rule name="Html5Mode" enabled="true" stopProcessing="true"> 
     <match url="^(.+)$" negate="true" /> 
     <conditions> 
     <add input="{REQUEST_URL}" pattern="^(.+)$" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/index.html" logRewrittenUrl="true"/> 
    </rule> 
    <rule name="AngularJS" enabled="true" 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}" pattern="^/(api)" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/index.html" /> 
    </rule>   
    </rules> 
</rewrite> 

這裏是整個web.config文件,包括提供靜態文件。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
      <clear />   
      <rule name="Html5Mode" enabled="true" stopProcessing="true"> 
       <match url="^(.+)$" negate="true" /> 
       <conditions> 
       <add input="{REQUEST_URL}" pattern="^(.+)$" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="/index.html" logRewrittenUrl="true"/> 
      </rule> 
      <rule name="AngularJS" enabled="true" 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}" pattern="^/(api)" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="/index.html" /> 
      </rule>   
      </rules> 
     </rewrite> 
     <handlers> 
      <clear /> 
      <add 
       name="StaticFile" 
       path="*" verb="*" 
       modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" 
       resourceType="Either" 
       requireAccess="Read" /> 
     </handlers> 
     <staticContent> 
      <mimeMap fileExtension=".*" mimeType="application/octet-stream" /> 
     </staticContent> 
    </system.webServer> 
</configuration>