summaryrefslogtreecommitdiff
path: root/bin/contrib/rc-httpd/handlers/serve-static
diff options
context:
space:
mode:
authorglenda <glenda@9front.local>2020-11-15 15:13:27 +0000
committerglenda <glenda@9front.local>2020-11-15 15:13:27 +0000
commit39318169e0b50551db511851829f9337c5fa6313 (patch)
tree65a0ef5c1da9677532fa8105293d017919473057 /bin/contrib/rc-httpd/handlers/serve-static
Import site to git
Diffstat (limited to 'bin/contrib/rc-httpd/handlers/serve-static')
-rwxr-xr-xbin/contrib/rc-httpd/handlers/serve-static43
1 files changed, 43 insertions, 0 deletions
diff --git a/bin/contrib/rc-httpd/handlers/serve-static b/bin/contrib/rc-httpd/handlers/serve-static
new file mode 100755
index 0000000..00cc70a
--- /dev/null
+++ b/bin/contrib/rc-httpd/handlers/serve-static
@@ -0,0 +1,43 @@
+#!/bin/rc
+full_path=`{echo $"FS_ROOT^$"PATH_INFO | urldecode.awk}
+full_path=$"full_path
+if(~ $full_path */)
+ error 503
+if(test -d $full_path){
+ redirect perm $"location^'/' \
+ 'URL not quite right, and browser did not accept redirect.'
+ exit
+}
+if(! test -e $full_path){
+ error 404
+ exit
+}
+if(! test -r $full_path){
+ error 503
+ exit
+}
+do_log 200
+switch($full_path){
+case *.html *.htm
+ type=text/html
+case *.css
+ type=text/css
+case *.txt
+ type='text/plain; charset=utf-8'
+case *.jpg *.jpeg
+ type=image/jpeg
+case *.gif
+ type=image/gif
+case *.png
+ type=image/png
+case *
+ type=`{file -m $full_path || file -i $full_path} # GROSS
+}
+max_age=3600 # 1 hour
+echo 'HTTP/1.1 200 OK'^$cr
+emit_extra_headers
+echo 'Content-type: '^$type^'; charset=utf-8'^$cr
+echo 'Content-length: '^`{ls -l $full_path | awk '{print $6}'}
+echo 'Cache-control: max-age='^$max_age^$cr
+echo $cr
+exec cat $full_path