【问题标题】:Angularjs routing and html5Angularjs 路由和 html5
【发布时间】: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


【解决方案1】:

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

RewriteRule ^.*$ index.html

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

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

【讨论】:

  • 做到了,(\w+) 太具体了,它没有抓取任何额外的目录。
猜你喜欢
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
相关资源
最近更新 更多