我正在使用AngularJS ui路由进行路由,我想删除#(来自URL的哈希)。我正在使用此代码,也正在我的index.html文件中使用(base href =“ /”)。它工作正常,但是当我刷新(http://0.0.0.0:3000/athletepersonalinfo
)之类的页面时,出现了错误。
.config(function($stateProvider,$locationProvider) {
$locationProvider.html5Mode({ enabled: true, requireBase: false })
$stateProvider
.state('/', {
url: '',
templateUrl:HTML.HOME,
controller: 'homeController as home'
})
.state('home', {
url: '/',
controller: 'homeController as home',
templateUrl: HTML.HOME
})
.state('athletepersonalinfo', {
url: '/athletepersonalinfo',
controller: 'athleteProfileInfo',
templateUrl: HTML.ATHLETE_PERSONAL_INFO,
authenticate: true
})
最佳答案
当您单击刷新时,服务器实际上会尝试查找给定的路由是否已定义为/athletepersonalinfo
。要从网址中实际删除#,您必须添加一个get(/*)
路由,该路由将始终返回您的index.html
页面。此路由应位于所有其他路由之后。现在,这意味着只要未定义路线,您的index.html
就将被投放,而在客户端,angular将处理要加载的视图。进行此类攻击时要注意的几点
由于任何未解决的get都可能返回index.html,因此请确保您的路由有意义,就像所有资产都以/ assets / path开头一样,因此所有api调用都应以/ api /开头。
这样做的好处是,如果在某些资产上获得404或api调用,您仍然会得到index.html
,这是错误的。但是使用这种方法,您需要做的就是设置一条类似这样的路线
app.get('/:url(api|assets)/*',function(req,res){
res.status(400).send("Not Found")
});
app.get('/*',function(req,res){
res.sendFile('index.html');
});
确保在所有其他路由之后定义*路由,否则您将为每个请求不断获取index.html。
希望这可以帮助。
关于javascript - AngularJS ui路由哈希前缀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38722410/