Angular 在 AWS (Cloudfront/S3) 上用于 Safari

Angular on AWS (Cloudfront/S3) for Safari

我在 Safari 上查看我的网站时遇到问题。我知道有很多信息可以找到,但我不知道什么才是真正有用的。

我有一个带有 angular ui-路由器的 Angular 应用程序,配置如下: $locationProvider.html5Mode(true).hashPrefix('!');

在我的index.html

<meta name="fragment" content="!">
<base href="/" />

我的S3配置是这样的:

<RoutingRules>
    <RoutingRule>
        <Condition>
            <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <HostName>test.example.com</HostName>
            <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

现在,当我在 Safari 中 F5 一个页面时,# 之后的所有内容都丢失了。 2016年真的没有办法解决吗?

我找到了解决方案。显然,如果您使用 https 协议,Safari 和 ios 中的哈希值不会被删除。您必须像这样将协议添加到 S3 重定向选项:

<Redirect>
    <Protocol>https</Protocol>
    <HostName>test.example.com</HostName>
    <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
</Redirect>

在此示例中,我指向支持 https 的 Cloudfront 分发。使用新的证书管理器,安装免费的 SSL 证书非常容易。

我找到了另一种解决方案,该解决方案还允许在一个存储桶的子文件夹中包含多个 angular 应用程序并随意使用子域

S3 Static Website Hosting Route All Paths to Index.html