Lambda@Edge function for handling redirects and rewrites
Store your redirect and rewrite rules in rules.txt
/otis 301 http://www.phillyotis.com
/parksandrec(.*) 301 /departments/philadelphia-parks-recreation/
/revenue/(.*) 301 /departments/department-of-revenue/$1
/contracts/data$ 301 /contracts/data/
/contracts/data/(.*) 200 https://cityofphiladelphia.github.io/contracts/$1
Use status code 301 for a permanent redirect, and 200 for a rewrite.
Patterns are converted to regexes with the following enhancements:
- Case-insensitive
^is prepended (unless it already starts with^)/?$is appended (unless it already ends with$)
Redirect /otis or /otis/ to their external site:
/otis 301 http://phillyotis.com
Redirect /eeocomplaint and /eeocomplaints and /eeo-complaints to its service page:
/eeo-?complaints? 301 /services/working-jobs/file-a-sexual-harassment-complaint/
Redirect anything under /parksandrec to the new homepage:
/parksandrec/?.* 301 /departments/parks-and-recreation/
Redirect anything under /oem to its expanded route:
/oem/?(.*) 301 /departments/office-of-emergency-management/$1
Rewrite /contracts/data to mask a site on github pages (note the redirect for a missing trailing slash, which is otherwise handled by S3's static file hosting feature):
/contracts/data$ 301 /contracts/data/
/contracts/data/(.*) 200 https://cityofphiladelphia.github.io/contracts/$1
- You can use sites like regex101 to test your regular expressions.
- You can use tsv-pretty to format the file to be more readable.
Deployment will happen automatically via github actions
- Pushes to the
stagingbranch will deploy to the staging environment. - Pushes to the
mainbranch will deploy to the production environment.
You can skip deployment on a push by specifying [skip ci] in the commit message.
npm installnpm test$ ./deploy.sh $LAMBDA_NAME $LAMBDA_ROLE $S3_BUCKET $CLOUDFRONT_DISTRIBUTION_ID