Skip to content

CityOfPhiladelphia/phila.gov-router

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

phila.gov router

Lambda@Edge function for handling redirects and rewrites

usage

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 $)

examples

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

tips

  • 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

Deployment will happen automatically via github actions

  • Pushes to the staging branch will deploy to the staging environment.
  • Pushes to the main branch will deploy to the production environment.

You can skip deployment on a push by specifying [skip ci] in the commit message.

local development

install node.js dependencies

npm install

run tests

npm test

manual deployment

$ ./deploy.sh $LAMBDA_NAME $LAMBDA_ROLE $S3_BUCKET $CLOUDFRONT_DISTRIBUTION_ID

About

Lambda@Edge function for handling redirects and rewrites for phila.gov

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published