【发布时间】:2013-10-22 02:59:11
【问题描述】:
我的申请有一些路线:
$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...etc... 在非 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,否则它将在重写后再次处理通用规则,一切都会重定向到索引。
【问题讨论】:
-
你试过在你的 index.html 页面中设置一个基本的 href 吗?
-
修复了其他重定向,但现在其他所有内容都被破坏了。
-
$locationprovider.html5mode(true)? -
设置好了,一切都会中断,当它没有设置时,一切正常,尽管有那个井号,我正试图摆脱它。
-
RE: Henk Jansen
$locationProvider.html5Mode(true);而不是$locationprovider.html5mode(true);
标签: javascript angularjs mod-rewrite angularjs-routing