Javascript Angularjs路由和html5
我有一些申请途径:Javascript Angularjs路由和html5,javascript,angularjs,mod-rewrite,angularjs-routing,Javascript,Angularjs,Mod Rewrite,Angularjs Routing,我有一些申请途径: $routeProvider. when('/user', {templateUrl: 'user/partials/userlist.html', controller: 'userListController'}). when('/user/:userName', {templateUrl: 'user/partials/userdetail.html', controller: 'userDetailControlle
$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版本中
这样的话,一切都很好。当我打开HTML5时,它会立即重定向到:www.domain.com/user/,当然,它不起作用。我如何告诉路由提供商我的模块的根目录是/admin/
编辑:
我在index.html头标记的最后一行添加了:
,现在当我转到www.domain.com/admin时,它会正确地重定向到www.domain.com/admin/user,并使用用户列表模板和控制器。但是,当我直接导航到www.domain.com/admin/user时,它会给我一个页面未找到错误。我开始怀疑这部分内容是否与我的默认重写规则有关:
RewriteRule ^$ index.html
编辑:
是的。我明白了。完全删除了重写,从默认重定向到用户,然后转到用户详细信息,它工作了,但是键入/user或任何其他路径都不工作……它似乎只适用于html5,因为当我从应用程序本身进行导航时,我无法直接导航到不同的视图。例如,当我试图直接进入团队时,它不起作用
因此,没有重写规则来重写索引,用户默认路由有效,组和类别无效
编辑:
这是我发现的。默认index.html(即$location.html5mode(true)集)不需要重写,只要您导航到在www.domain.com/#/user/或www.domain.com/#/group中键入的页面,它就可以工作。它会立即将URL重写为www.domain.com/user或www.domain.com/group。但是,如果您试图直接导航到www.domain.com/user,它将不起作用。显然,重写规则在这里没有帮助,因为它是处理路由的前端
这是角度布线的标准行为吗
已编辑以添加到解决方案:
如果您有任何重定向到子目录的附加路由,请务必使用[END]标记或确保目录已关闭mod rewrite,否则重写后它将再次处理通用规则,所有内容都将重定向到索引。,问题是,当人们转到根url时,您只提供AngularJS HTML和JS。服务器没有看到哈希,它只看到
www.domain.com/
。但是,听起来你想用角度来做任何事情,所以你应该考虑这样的通配符路由。
RewriteRule ^.*$ index.html
这将确保无论在www.domain.com/
之后发生什么情况,您都会将index.html
返回到浏览器,浏览器将加载AngularJS和您的路由,以便AngularJS可以完成其余工作
除非我误解了这里发生的事情,否则我很确定这是你的问题。从我所看到的,问题是当人们转到根url时,你只提供AngularJS HTML和JS。服务器没有看到哈希,它只看到
www.domain.com/
。但是,听起来你想用角度来做任何事情,所以你应该考虑这样的通配符路由。
RewriteRule ^.*$ index.html
这将确保无论在www.domain.com/
之后发生什么情况,您都会将index.html
返回到浏览器,浏览器将加载AngularJS和您的路由,以便AngularJS可以完成其余工作
除非我误解了这里发生的事情,否则我很确定这是你的问题。你是否尝试过在index.html页面中设置base href?它修复了其他重定向,但现在其他所有内容都被破坏。
$locationprovider.html5mode(true)
?这是设置的,当没有设置时,所有内容都会被破坏,尽管使用了散列符号,我正试图去除它。RE:Henk Jansen$locationProvider.html5Mode(true)代码>而不是$locationprovider.html5mode(true)
您是否尝试过在index.html页面中设置base href?它修复了否则的重定向,但现在其他所有内容都已中断。$locationprovider.html5mode(true)
?如果未设置,则所有内容都会中断,尽管使用了该哈希符号,我正试图摆脱它。RE:Henk Jansen$locationProvider.html5Mode(true)代码>而不是$locationprovider.html5mode(true)代码>这样做了,(\w+)太具体了,它没有抓取任何额外的目录。这样做了,(\w+)太具体了,它没有抓取任何额外的目录。