我的申请有一些路线:
$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'});
应用程序的根目录是 /admin/,我将 .htaccess 设置为默认为 index.html,因此该站点看起来像:www.domain.com/admin/#/user/username
...等...在非 HTML5 版本中。
当它像那样时,一切都很好。当我打开 HTML 5 时,它会立即重定向到:www.domain.com/user/,当然,它不起作用。如何告诉我的路由提供商我的模块的根目录是 /admin/?
编辑:
我在 index.html 头标签的最后一行添加了:<base href="/admin/"></base>
现在当我转到 www.domain.com/admin 时,它正确地重定向到 www.domain.com/admin/user 并使用了用户列表模板和控制器。但是,当我直接导航到 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,它就不起作用。显然,重写规则在这里无济于事,因为它是前端处理路由。
这是角度路由的标准行为吗?
编辑添加到解决方案:
如果您有任何其他重定向到子目录的路由,请确保使用 [END] 标记或确保目录已关闭 mod-rewrite,否则它将在重写后再次处理通用规则,并且所有内容都将重定向到指数。