2013-06-04 84 views
5

我想知道是否有人可以告訴我,當您將模式更改爲Angular js中的html5時,需要完成哪些服務器端更改。因爲當我嘗試將其更改爲html 5模式時,我無法進入我的內部html頁面。在Angular API中,它表示suers需要做一個服務器端更改。服務器端更改Angular html5模式

  1. 什麼是服務器端更改
  2. 做我們需要做任何其他的變化呢?
+0

我還沒有做過這件事,但我相信你需要重寫你的URL,以便它們指向你的index.html(即當你請求'/ index.html'時,服務器會輸出'/ index.html' /接觸/倫敦office')。如果您使用的是Apache,請查看'mod_rewrite'。 –

回答

0

你應該區分兩種類型的呼叫:從瀏覽器

  1. HTML調用。這些都應該重新映射爲您的索引或任何其他服務。
  2. JSON API請求。這些應該傳遞給你的應用服務器。

如何區分這兩種類型的調用,以及如何重新映射前者,很大程度上取決於您的設置。

如果使用nginx的,例如,檢查$ HTTP_ACCEPT的組合是application/json(見http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Requestshttp://wiki.nginx.org/HttpCoreModule#.24http_HEADER)和重寫(http://wiki.nginx.org/HttpRewriteModule#rewrite),你可以達到你想要的東西。

0

你需要設置你的服務器重寫一切index.html的每個:https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode ...

<VirtualHost *:80> 
    ServerName my-app 

    DocumentRoot /path/to/app 

    <Directory /path/to/app> 
     RewriteEngine on 

     # Don't rewrite files or directories 
     RewriteCond %{REQUEST_FILENAME} -f [OR] 
     RewriteCond %{REQUEST_FILENAME} -d 
     RewriteRule^- [L] 

     # Rewrite everything else to index.html to allow html5 state links 
     RewriteRule^index.html [L] 
    </Directory> 
</VirtualHost> 

我的應用程序已經PARAMS傳遞給控制器​​(通過UI路由器),所以html5mode我會轉到前 www.blah.com/angapp/#/myUIrouterController?param_x=1 & param_y = 2 猜測瀏覽器知道/#/文件夾路徑部分應該爲index.html提供服務。

現在,#將與html5mode一起消失,服務器默認情況下不知道爲該文件夾提供index.html,因爲url只是: www.blah.com/angapp/myUIrouterController?param_x= 1 & param_y = 2 myUIRouterController不是一個真正的文件,所以服務器只會提供一個404,因此爲什麼我認爲需要重寫,所以它知道要發送一切到index.html(所以上面結合<基地>標籤應該工作...注意:requireBase是可選的,但聽說它可以幫助IE9等舊版瀏覽器)。