我正在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)
答案 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
});