~repos /website

#astro#js#html#css

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
Files changed (1) hide show
  1. 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
- default_cache_behavior {
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
- ordered_cache_behavior {
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.repos_bucket.bucket_regional_domain_name
245
+ target_origin_id = aws_s3_bucket.website.bucket_regional_domain_name
201
-
202
246
  forwarded_values {
203
- query_string = false
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"