2013-10-14 128 views
1

我有我的應用程序的一些路線:Angularjs路由和HTML5

$routeProvider. 
      when('/user', {templateUrl: 'user/partials/userlist.html', controller: 'userListController'}). 
      when('/user/:userName', {templateUrl: 'user/partials/userdetail.html', controller: 'userDetailController'}). 
      when('/group',{templateUrl: 'group/partials/grouplist.html', controller: 'groupListController'}). 
      when('/group/:groupName', {templateUrl: 'group/partials/groupdetail.html', controller: 'groupDetailController'}). 
      when('/category',{templateUrl: 'category/partials/categorylist.html', controller: 'categoryListController'}). 
      otherwise({redirectTo: '/user'}); 

應用程序的根目錄是/管理/我有我的.htaccess設置爲默認的index.html使網站看起來像: www.domain.com/admin/#/user/username ...等...在非HTML5版本中。

一切正常,當它是這樣的。當我打開HTML 5時,它立即重定向到:www.domain.com/user/,當然,它不起作用。我怎麼能告訴我的路由提供者,我的模塊的根目錄是/ admin /?

編輯:

我說:<base href="/admin/"></base>我的index.html head標籤的最後一行,現在當我去www.domain.com/admin它正確地重定向到www.domain.com/admin/使用用戶和用戶列表模板和控制器。但是,當我直接導航到www.domain.com/admin/user時,它會給我一個找不到頁面的錯誤。我開始懷疑,如果這部分內容與我的默認重寫規則做:

RewriteRule ^$ index.html 

編輯:

是啊。弄清楚了。完全剔除了重寫,它從默認的重定向到用戶,然後去userdetail它的工作,但在/ user或任何其他路線中輸入不起作用...它似乎只適用於html5是當我從應用程序本身進行導航,我無法直接導航到不同的視圖。例如,當我嘗試直接進行組合時,它不起作用。

因此,沒有重寫規則來重寫索引,用戶默認路由工作,組和類別不重寫。

編輯:

這是我找到的。無需重寫默認index.html,即$ location.html5mode(true)集,只要您導航至您在www.domain.com/#/user/或www.domain.com中鍵入的頁面/#/組。它會立即將URL重寫爲www.domain.com/user或www.domain.com/group。但如果您嘗試直接導航至www.domain.com/user,則無法使用。顯然,重寫規則在這裏沒有幫助,因爲它是前端處理路由的前端。

這是角度路由的標準行爲嗎?

編輯以添加到解決方案:

如果您已經準備好任何其他路由重定向到子目錄,besure要麼使用[END]標記,或者確保目錄已經國防部重寫關閉或它將在重寫後再次處理通用規則,並且所有內容都將重定向到索引。

+2

您是否嘗試過在您的index.html頁面中設置基礎href? –

+0

修復了其他方面的重定向,但現在一切都被破壞了。 – Snowburnt

+1

'$ locationprovider.html5mode(true)'? –

回答

1

從我所看到的問題是,當人們進入根網址時,您只能使用AngularJS HTML和JS。服務器看不到散列,只能看到www.domain.com/。然而,它聽起來像你希望Angular做所有事情,所以你應該考慮這樣的通配符路由。

RewriteRule ^.*$ index.html 

這將確保無論您將返回到index.html將加載AngularJS和你的路由,這樣AngularJS可以做其他的瀏覽器www.domain.com/後什麼錐。

除非我誤解了這裏發生的事情,我很確定這是你的問題。

+0

也做到了,在(\ w +)是太具體,但沒」不要抓住任何額外的目錄。 – Snowburnt