]> git.plutz.net Git - cgilite/blobdiff - server.sh
shorthand html
[cgilite] / server.sh
index a4229b252c90a409348c909e85df6f6027ff3384..c49c0d8e7f1fd1039eb147a283499c6e6aa037d3 100755 (executable)
--- a/server.sh
+++ b/server.sh
@@ -34,6 +34,10 @@ sed -unr '
     h
     s;^(GET|HEAD|POST) ([^\?]*)\??(.+)? (HTTP\/[0-9]\.[0-9])\r?$;export REQUEST_METHOD='\''\1'\'';p
     g
+    s;^(GET|HEAD|POST) ([^\?]*\??.*) (HTTP\/[0-9]\.[0-9])\r?$;\2;
+    s;'\'';'\''\\'\'''\'';g
+    s;^.*$;export REQUEST_URI='\''&'\'';p
+    g
     s;^(GET|HEAD|POST) ([^\?]*)\??(.+)? (HTTP\/[0-9]\.[0-9])\r?$;\2;
     s;'\'';'\''\\'\'''\'';g
     s;^.*$;export PATH_INFO='\''&'\'';p
@@ -66,7 +70,7 @@ sed -unr '
 )
 
 HTTP_format(){
-  LC_ALL=C sed -rn '
+  LC_ALL=C sed -urn '
   :A
   /^\r?$/!{H;n;bA}
   
@@ -86,9 +90,10 @@ HTTP_format(){
   '
 }
 
-PATH_INFO="$(invalidate "${PATH_INFO}" '(^|.*/)\.\./.*' '')"
 
-if [ -z "$QUERY_STRING" -a -f "$_DATA/$PATH_INFO" ]; then
-  . "$_EXEC/shcgi/static.sh" "$_DATA/$PATH_INFO"
+if [ -z "$QUERY_STRING" ]; then
+  PATH_INFO="$(printf "$(printf %s "$PATH_INFO" |sed 's:+: :g;s:\\:\\\\:g;s:%:\\x:g')")"
+  PATH_INFO="$(invalidate "${PATH_INFO}" '(^|.*/)\.\./.*' '')"
+  [ -f "${treeroot:-${_DATA}}/$PATH_INFO" ] && . "$_EXEC/shcgi/static.sh" "${treeroot:-${_DATA}}/$PATH_INFO"
   exit 0
 fi |HTTP_format