使用s3静态网站和cloudfront

时间:2017-02-21 12:44:39

标签: angularjs amazon-s3 amazon-cloudfront

我的s3 + cloudfront中有几个网站,例如:

  • www.example.com/test /#/
  • www.example.com/test1 /#/

www.example.com是主要的存储桶,test和test1是下面的文件夹和单独的网站。

现在的问题是当我尝试在新标签页中打开内容时,例如仪表板。什么是常规导航时,网址变为:www.example.com/test/#/dashboard,它完美无缺。但是当它是一个新选项卡时,它会删除测试,成为:www.example.com/#/dashboard并给我一个404.

这是角度配置问题吗?还是cloudfront和s3问题?

编辑,下面的一些路由配置代码:

$urlRouterProvider.otherwise("/");
$stateProvider
  .state('home', {
    url: '/',
    templateUrl:'test/javascripts/templates/welcome/views/welcome.html',
    controller: 'WelcomeController'
  })
  .state('dashboard', {
    url: '/dashboard',
    templateUrl: 'test/javascripts/templates/dashboard/views/dashboard.html',
    controller: 'DashboardController'
  })

2 个答案:

答案 0 :(得分:2)

错误似乎是#URL's

的问题

$locationProvider.html5Mode(true);添加到配置文件。

    app.config(["$stateProvider","$locationProvider", function($stateProvider,$locationProvider) {

        $urlRouterProvider.otherwise("/");
        $stateProvider
        .state('home', {
            url: '/',
            templateUrl:'test/javascripts/templates/welcome/views/welcome.html',
            controller: 'WelcomeController'
        })
        .state('dashboard', {
            url: '/dashboard',
            templateUrl: 'test/javascripts/templates/dashboard/views/dashboard.html',
            controller: 'DashboardController'
        })

   $locationProvider.html5Mode(true).hashPrefix('!')
    }]);

现在,您应该告诉浏览器有关更改的信息,因此您必须在HEAD代码中设置base href

<强> <base href="/">

CHeck this link for more information

答案 1 :(得分:0)

@Sravan回答我记得索引html中的基本href标记,这是我很久以前设置的。我有这样的话:

<base href="/">

但是由于我正在处理s3中的文件夹,我认为/指向了我的网址的基础并从网址中删除了test。所以我只需要删除/成为:

<base href="">