html5mode Angular给出异常

时间:2016-04-28 21:22:50

标签: javascript angularjs

我正在Angular 1.5.5中建立一个网站,并希望拥有漂亮的网址(没有#)。按照其他一些帖子的说明,我在index.html中添加了 $locationProvider.html5Mode(true).hashPrefix('!'); <base href="innovationglobal"> 作为路由器以及基本网址

MemoryStream

但是,我得到以下例外:

  

错误:无法在“历史记录”上执行“replaceState”:无法在原点为“http://home/”的文档中创建网址为“http://localhost:8080”的历史状态对象。       在错误(本机)       在Yf.k.url(lib / 1.5.5 / angular.min.js:47: 311)

2 个答案:

答案 0 :(得分:0)

将代码更改为绝对网址或路径

<base href="innovationglobal">

添加/https://

<base href="/innovationglobal/">

现在当您重新加载页面时,浏览器会向服务器发送当前路径的请求:/innovationglobal/

您需要设置服务器来处理该路径 - 以及您的Angular应用程序可能放入浏览器地址栏的任何其他路径。这可能是/innovationglobal/users//innovationglobal/products/detail/等。

因为用户可能会按F5重新加载他们正在查看的任何页面。这将控制您的Angular应用程序,并将该URL的请求发送到服务器。

所以你需要设置一个全能的服务器。无论地址栏中的路径是什么,您的服务器都应使用Angular应用的index.html进行回复。

但是请注意,您需要为静态资产(例如.js和.css等文件)设置例外。对于nginx,这看起来有点像这样:

location = /static/ {
    alias /var/www/static/;
    try_files $uri $uri/ =404;
}
location /innovationglobal/ {
    root /var/www/innovationglobal;
    try_files $uri /app/index.html =404;
}

取决于您使用的网络服务器。

答案 1 :(得分:0)

您是否尝试过在不使用基础的情况下启用html5Mode

$locationProvider.html5Mode({
  enabled: true,
  requireBase: false
});
相关问题