Skip to content

Commit 53817c5

Browse files
committed
Fix for properly redirecting a path with no trailing slash to its directory
1 parent 54e537a commit 53817c5

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

main.tf

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
1+
locals {
2+
public_dir_with_leading_slash = "${length(var.public_dir) > 0 ? "/${var.public_dir}" : ""}"
3+
static_website_routing_rules = <<EOF
4+
[{
5+
"Condition": {
6+
"KeyPrefixEquals": "${var.public_dir}/${var.public_dir}/"
7+
},
8+
"Redirect": {
9+
"Protocol": "https",
10+
"HostName": "${var.domain_name}",
11+
"ReplaceKeyPrefixWith": "",
12+
"HttpRedirectCode": "301"
13+
}
14+
}]
15+
EOF
16+
}
17+
118
resource "aws_s3_bucket" "static_website" {
219
bucket = "${var.domain_name}"
320

421
website {
522
index_document = "index.html"
623
error_document = "error.html"
24+
25+
routing_rules = "${length(var.public_dir) > 0 ? local.static_website_routing_rules : ""}"
726
}
827

928
tags = "${merge(map("Name", "${var.domain_name}-static_website"), var.tags)}"
@@ -13,7 +32,7 @@ data "aws_iam_policy_document" "static_website_read_with_secret" {
1332
statement {
1433
sid = "1"
1534
actions = ["s3:GetObject"]
16-
resources = ["${aws_s3_bucket.static_website.arn}${var.public_dir}/*"]
35+
resources = ["${aws_s3_bucket.static_website.arn}${local.public_dir_with_leading_slash}/*"]
1736

1837
principals {
1938
type = "AWS"
@@ -34,13 +53,13 @@ resource "aws_s3_bucket_policy" "static_website_read_with_secret" {
3453
}
3554

3655
locals {
37-
s3_origin_id = "cloudfront-distribution-origin-${var.domain_name}.s3.amazonaws.com${var.public_dir}"
56+
s3_origin_id = "cloudfront-distribution-origin-${var.domain_name}.s3.amazonaws.com${local.public_dir_with_leading_slash}"
3857
}
3958

4059
resource "aws_cloudfront_distribution" "cdn" {
4160
origin {
4261
domain_name = "${aws_s3_bucket.static_website.website_endpoint}"
43-
origin_path = "${var.public_dir}"
62+
origin_path = "${local.public_dir_with_leading_slash}"
4463
origin_id = "${local.s3_origin_id}"
4564

4665
custom_origin_config {

variables.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ variable "domain_name" {
99
}
1010

1111
variable "public_dir" {
12-
description = "Directory in S3 Bucket from which to serve public files"
13-
default = "/public"
12+
description = "Directory in S3 Bucket from which to serve public files (no leading or trailing slashes)"
13+
default = "public"
1414
}
1515

1616
variable "redirects" {

0 commit comments

Comments
 (0)