1

我的申请有一些路线:

$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,否则它将在重写后再次处理通用规则,并且所有内容都将重定向到指数。

4

1 回答 1

1

据我所知,问题是当人们访问根 url 时,您只提供 AngularJS HTML 和 JS。服务器看不到它只看到的哈希值www.domain.com/。然而,听起来你希望 Angular 做所有事情,所以你应该考虑这样的通配符路由。

RewriteRule ^.*$ index.html

这将确保无论www.domain.com/您返回index.html到浏览器之后的哪个锥体,该浏览器都将加载 AngularJS 和您的路由,以便 AngularJS 可以完成剩下的工作。

除非我误解了这里发生的事情,否则我很确定这是你的问题。

于 2013-11-02T18:14:56.980 回答