当前我正在使用$ routeProvider来动态加载页面的各个部分,如下所示:
$routeProvider
.when('/', {
templateUrl: '/pages/home.html',
controller: 'mainController'
})
.when('/our-business', {
templateUrl: '/pages/our-business.html',
controller: 'businessController',
css: 'css/_business.css'
})
.when('/solutions', {
templateUrl: '/pages/solutions.html',
controller: 'solutionsController'
});
目前,如果我直接转到索引(localhost),然后选择“我们的业务”。从导航菜单中,Angular处理位置请求,页面加载正常,URL更改为 localhost / our-business 。如果我然后重新加载,或直接打开这个URL我得到404错误 - 大概是因为Apache试图打开我们的business.html并不存在。如果我打开 localhost /#/ our-business ,则加载索引,然后Angular处理请求。我遇到的问题是,这是一个面向公众的网站,所以如果用户要复制并粘贴网址或通过电子邮件分享,他们就会收到404错误。
有没有办法让Apache重写URL通过索引和AngularJS来解析它们,这样我们就可以保留非哈希样式但仍然有功能URL?
答案 0 :(得分:1)
正如Kailash所说,您可以将locationProvider设置为html5模式
$locationProvider.html5Mode(true)
当你引导角度应用程序时。
然后你必须告诉你的Apache服务器发送index.html(单页应用程序的入口点)以获取任何请求的URL。
角度路由器将处理正确的路径
答案 1 :(得分:-1)
不。在没有哈希的情况下更改网址会重新加载整个页面。
此$routeProvider
的重点是构建具有多个视图的单页应用。
基本上,在网址中使用#
是唯一的方法。对url散列的更改不会导致页面重新加载,并允许Angular加载相关视图。