Tenho um site Gatsby estático hospedado no S3 + Cloudfront. O site está funcionando bem com respostas de erro personalizadas com caminho definido como /index.html para código de erro 403
Mas quando tento inserir manualmente um caminho de página específico exmaple.com/path1
na aba do navegador e pressiono Enter, ele me redireciona para a example.com
página inicial.
Por que isso? Existe alguma solução para isso?
Minha política de permissão s3:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipal",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example.com/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::111111111111:distribution/f6666666"
}
}
}
]
}
Não sei muito sobre Gatsby, mas imagino que ele tenha gerado uma estrutura como essa que você implantou no seu bucket S3?
E você quer
GET /
retornar o conteúdo deindex.html
, eGET /path1
retornar o conteúdo de/path1/index.html
etc.? E seu plano para fazer isso era definir/index.html
como resposta de erro personalizada 403?Se entendi corretamente, então isso não vai funcionar como você quer. Se você configurou as coisas conforme descrito, eu esperaria
GET /path1
retornar o conteúdo de/index.html
.Uma maneira de fazer isso funcionar como você quer é alterar a resposta de erro personalizada 403 para algo mais apropriado (por exemplo, uma
/404.html
página) e, em seguida, associar uma função de solicitação do visualizador à sua distribuição do CloudFront que reescreve as solicitações para incluir/index.html
no final do caminho, se necessário. Algo como:Aqui está um modelo do CloudFormation onde isso é configurado, caso você queira ver como tudo se encaixa (aviso: este é meu repositório do GitHub).