html5mode角度给定异常

html5mode Angular giving exception

本文关键字:异常 html5mode      更新时间:2023-09-26

我正在Angular 1.5.5中构建一个网站,希望拥有漂亮的url(没有#)。按照其他帖子中的说明,我在index.html 中添加了Html5mode作为路由器和基本url

    $locationProvider.html5Mode(true).hashPrefix('!');
    <base href="innovationglobal"> 

然而,我得到了以下例外:

错误:无法对"History"执行"replaceState":URL为"的历史状态对象http://home/"无法在具有来源的文档中创建"http://localhost:8080"。错误(本机)在Y.k.url(lib/1.5.5/angular.min.js:47:311)

将标签更改为绝对URL或路径后

<base href="innovationglobal">

通过添加/https://

<base href="/innovationglobal/">

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

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

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

因此,您需要设置一个包罗万象的服务器。无论地址栏中的路径是什么,服务器都应该使用Angular应用程序的index.html进行回复。

但是要小心,你需要为你的静态资产(像.js和.css这样的文件)破例

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

取决于您使用的web服务器。

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

$locationProvider.html5Mode({
  enabled: true,
  requireBase: false
});