~repos /website
git clone https://pyrossh.dev/repos/website.git
木 Personal website of pyrossh. Built with astrojs, shiki, vite.
5eb44a20
—
pyrossh 6 months ago
fix zip redirect
- infra/main.tf +57 -11
infra/main.tf
CHANGED
|
@@ -148,6 +148,27 @@ resource "aws_cloudfront_function" "subdirectory_redirector" {
|
|
|
148
148
|
CODE
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
+
resource "aws_cloudfront_function" "zip_redirector" {
|
|
152
|
+
name = "zip_redirector"
|
|
153
|
+
runtime = "cloudfront-js-2.0"
|
|
154
|
+
publish = true
|
|
155
|
+
code = <<CODE
|
|
156
|
+
function handler(event) {
|
|
157
|
+
const request = event.request;
|
|
158
|
+
const uri = request.uri;
|
|
159
|
+
|
|
160
|
+
if (uri.endsWith('.zip')) {
|
|
161
|
+
request.uri = "/" + request.uri.replace("/zips/", "").replace(".zip", "") + "/refs/heads/master/repo.zip"
|
|
162
|
+
return request;
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
statusCode: 404,
|
|
166
|
+
statusDescription: 'Not Found',
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
CODE
|
|
170
|
+
}
|
|
171
|
+
|
|
151
172
|
resource "aws_cloudfront_distribution" "s3_distribution" {
|
|
152
173
|
origin {
|
|
153
174
|
domain_name = aws_s3_bucket.website.bucket_regional_domain_name
|
|
@@ -173,7 +194,32 @@ resource "aws_cloudfront_distribution" "s3_distribution" {
|
|
|
173
194
|
}
|
|
174
195
|
}
|
|
175
196
|
|
|
176
|
-
|
|
197
|
+
ordered_cache_behavior {
|
|
198
|
+
path_pattern = "/zips/*"
|
|
199
|
+
allowed_methods = ["GET", "HEAD"]
|
|
200
|
+
cached_methods = ["GET", "HEAD"]
|
|
201
|
+
target_origin_id = aws_s3_bucket.repos_bucket.bucket_regional_domain_name
|
|
202
|
+
|
|
203
|
+
forwarded_values {
|
|
204
|
+
query_string = false
|
|
205
|
+
cookies {
|
|
206
|
+
forward = "none"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
min_ttl = 0
|
|
211
|
+
default_ttl = 86400
|
|
212
|
+
max_ttl = 31536000
|
|
213
|
+
compress = true
|
|
214
|
+
viewer_protocol_policy = "redirect-to-https"
|
|
215
|
+
function_association {
|
|
216
|
+
event_type = "viewer-request"
|
|
217
|
+
function_arn = aws_cloudfront_function.zip_redirector.arn
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
ordered_cache_behavior {
|
|
222
|
+
path_pattern = "/*"
|
|
177
223
|
allowed_methods = ["GET", "HEAD"]
|
|
178
224
|
cached_methods = ["GET", "HEAD"]
|
|
179
225
|
target_origin_id = aws_s3_bucket.website.bucket_regional_domain_name
|
|
@@ -193,24 +239,24 @@ resource "aws_cloudfront_distribution" "s3_distribution" {
|
|
|
193
239
|
}
|
|
194
240
|
}
|
|
195
241
|
|
|
196
|
-
|
|
242
|
+
default_cache_behavior {
|
|
197
|
-
path_pattern = "/zips/*"
|
|
198
243
|
allowed_methods = ["GET", "HEAD"]
|
|
199
244
|
cached_methods = ["GET", "HEAD"]
|
|
200
|
-
target_origin_id = aws_s3_bucket.
|
|
245
|
+
target_origin_id = aws_s3_bucket.website.bucket_regional_domain_name
|
|
201
|
-
|
|
202
246
|
forwarded_values {
|
|
203
|
-
query_string =
|
|
247
|
+
query_string = true
|
|
204
248
|
cookies {
|
|
205
249
|
forward = "none"
|
|
206
250
|
}
|
|
207
251
|
}
|
|
208
|
-
|
|
209
|
-
min_ttl = 0
|
|
210
|
-
default_ttl = 86400
|
|
211
|
-
max_ttl = 31536000
|
|
212
|
-
compress = true
|
|
213
252
|
viewer_protocol_policy = "redirect-to-https"
|
|
253
|
+
min_ttl = 0
|
|
254
|
+
default_ttl = 3600
|
|
255
|
+
max_ttl = 86400
|
|
256
|
+
function_association {
|
|
257
|
+
event_type = "viewer-request"
|
|
258
|
+
function_arn = aws_cloudfront_function.subdirectory_redirector.arn
|
|
259
|
+
}
|
|
214
260
|
}
|
|
215
261
|
|
|
216
262
|
price_class = "PriceClass_All"
|