我有一个angularJS应用程序,配置如下:
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('!');
所以在现代浏览器中,它与pushstate一起使用没有问题,例如URL将是:
http://myapp.com/members
在旧版浏览器中,例如IE9,当我浏览到该URL时,它按预期将其重写为:
http://myapp.com/members#!/members
点击此处的任何链接都会使用hashbang方法,也是正确的:
http://myapp.com/members#!/members/add
...然而
如果我在一个hashbang重写的url上完全重新加载页面,它将继续将哈希附加到自身。第一次刷新:
http://myapp.com/members#!/members#!/members#!%2Fmembers
..和第二次刷新:
http://myapp.com/members#!/members#!/members#!%2Fmembers#!/members#!%2Fmembers%23!%2Fmembers%23!%2Fmembers
这里发生了什么可能导致这种情况?通常它不会发生,因为人们将在应用程序内导航并且角度将处理网址,但完全重新加载似乎打破了它。感谢。
答案 0 :(得分:6)
尝试设置
<base href="/" />
头上?它可能是一个有角度的1.1.5错误/特征。
答案 1 :(得分:1)
在<base>
中放置<head>
标签似乎是要走的路......
<head>
<base href="/">
</head>
......但可能还有更多工作需要完成。我也将$locationProvider
设置为html5Mode
,并在加载页面时出错。
myAngularModule.config($locationProvider =>
{
$locationProvider.html5Mode({
enabled: true,
requireBase: false,
rewriteLinks: false
});
});
对于html5Mode,我还必须configure my server。