2013-10-14 102 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