Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs路由和html5_Javascript_Angularjs_Mod Rewrite_Angularjs Routing - Fatal编程技术网

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+)太具体了,它没有抓取任何额外的目录。