diff --git a/README.md b/README.md
index 6bd773e..01f9601 100644
--- a/README.md
+++ b/README.md
@@ -23,3 +23,6 @@ An usable bash-httpserver with easy configuration and PHP.
* `cd ~/simpsh-httpd`
* `./start-socat.sh`
6. Have fun with simpsh-httpd!
+
+
+Tip: You don't need to restart simpsh-httpd after update-/configchange!
diff --git a/config.sh b/config.sh
index d153786..29326ff 100644
--- a/config.sh
+++ b/config.sh
@@ -1,19 +1,22 @@
#! /bin/bash
# Wo ist der Webroot (Hauptverzeichniss)?
-export FILES="/var/www/html"
+FILES="/var/www/html/"
# Wie soll der Titel der Dateiliste sein, die aufgerufene URL ist in $URL enthalten.
-export HTMLTITLE="Datei: $URL"
+HTMLTITLE="Datei: $URL"
# Wo soll das Fertige HTML-Dokument gespeichert werden? Die Variable $OUTFILEID muss enthalten sein!
-export OUTFILE="/tmp/simpsh-html.${OUTFILEID}.html"
+OUTFILE="/tmp/simpsh-html.${OUTFILEID}.html"
# Welcher Content-Type soll bei einem Unbekannten Dateityp gesendet werden?
-export DEFAULTCONTENTTYPE="text/html"
+DEFAULTCONTENTTYPE="text/html"
# Port zum lauschen (Falls start-socat.sh als startscript verwendet wird)
-export PORT=8888
+PORT=8888
# Wie heisst die Webseite (URL des obersten Verzeichnis)?
-export WEBSITE="http://localhost:$PORT"
+WEBSITE="http://localhost:$PORT"
+
+# Statuscode-Seiten (Müssen txt-Dateien sein)
+ERROR404="${FILES}/404.txt"
diff --git a/filelist.sh b/filelist.sh
index 872cbce..0063f3c 100644
--- a/filelist.sh
+++ b/filelist.sh
@@ -2,7 +2,7 @@
status="$URL"
-# Statisches HTML
+# Dynamisches HTML
echo '
'"${HTMLTITLE}"'
@@ -11,8 +11,6 @@ echo '
'"$status"'
Directory list:
..
' >> $OUTFILE
-
-# Erstelle Dateiliste im HTML-Format
for i in $( ls "${FILE}" ); do
echo ' '"${i}"'
' >> $OUTFILE
done
diff --git a/httpheaders.sh b/httpheaders.sh
index 0a0021f..0a9ae03 100644
--- a/httpheaders.sh
+++ b/httpheaders.sh
@@ -1,5 +1,5 @@
#! /bin/bash
-echo "$ANSWER" >> $OUTFILE
+echo "$STATUS" >> $OUTFILE
echo 'Date: '"$(date)" >> $OUTFILE
echo 'Server: httpd' >> $OUTFILE
echo 'Content-Type: '"$CONTENTTYPE" >> $OUTFILE
diff --git a/init.sh b/init.sh
index d8420da..6ad83b2 100644
--- a/init.sh
+++ b/init.sh
@@ -1,3 +1,4 @@
#! /bin/bash
-export OUTFILEID="$RANDOM"
+STATUS="HTTP/1.0 200 OK"
+OUTFILEID="$RANDOM"
diff --git a/main.sh b/main.sh
index a9eba16..ae96e85 100644
--- a/main.sh
+++ b/main.sh
@@ -9,7 +9,7 @@
# Lese HTTP-Anfrage
. ./readrequest.sh
-# Eine kurze sicherheutsüberprüfung...
+# Und vieles andere...
. ./urlcheck.sh
# Wenn das Dokument schon fertig ist, dann den folgenden Schritt überspringen
diff --git a/readrequest.sh b/readrequest.sh
index ad41f7f..ef28783 100644
--- a/readrequest.sh
+++ b/readrequest.sh
@@ -6,4 +6,6 @@ read header
# Verarbeite den request
URL="${header#GET }"
URL="${URL% HTTP/*}"
-export FILE="$FILES$URL"
+FILE="$FILES$URL"
+DECODED_FILE=$(printf '%b' "${FILE//%/\\x}")
+FILE="$DECODED_FILE"
diff --git a/sendfile.sh b/sendfile.sh
index 79660af..16f8020 100644
--- a/sendfile.sh
+++ b/sendfile.sh
@@ -2,18 +2,15 @@
# Überprüfe: Muss eine Dateiliste ausgegeben werden? Ist es ein PHP-script?
if [[ "$FILE" == *.php ]]; then
- export ANSWER="HTTP/1.0 200 OK"
- export CONTENTTYPE="text/html"
+ CONTENTTYPE="text/html"
. ./httpheaders.sh
php "$FILE" >> $OUTFILE
elif [ -f "${FILE}" ]; then
- export ANSWER="HTTP/1.0 200 OK"
- export CONTENTTYPE="$DEFAULTCONTENTTYPE"
+ CONTENTTYPE="$DEFAULTCONTENTTYPE"
. ./httpheaders.sh
cat "${FILE}" >> ${OUTFILE}
else
- export ANSWER="HTTP/1.0 200 OK"
- export CONTENTTYPE="text/html"
+ CONTENTTYPE="text/html"
. ./httpheaders.sh
. ./filelist.sh
fi
diff --git a/urlcheck.sh b/urlcheck.sh
index 99f07d1..7e8bba3 100644
--- a/urlcheck.sh
+++ b/urlcheck.sh
@@ -2,29 +2,36 @@
# Blockiere Versuche, das restliche Dateisystem zu lesen
if [[ "$URL" == *..* ]]; then
- export URL='/'
- export FILE="$FILES"
+ URL='/'
+ FILE="$FILES"
fi
# Verhindere "/"-bug
if [ -d "$FILE" ]; then
if [[ "$URL" != */ ]]; then
- export ANSWER='HTTP/1.0 302 Moved permanently
+ STATUS='HTTP/1.0 302 Moved permanently
Location: '"${WEBSITE}${URL}"'/'
- export CONTENTTYPE="$DEFAULTCONTENTTYPE"
+ CONTENTTYPE="$DEFAULTCONTENTTYPE"
. ./httpheaders.sh
- export DONE=true
+ DONE=true
fi
fi
-# Erkenne index.html
+# Finde index.html
if [ -f "${FILE}index.html" ]; then
- export URL="${URL}index.html"
- export FILE="${FILE}index.html"
+ URL="${URL}index.html"
+ FILE="${FILE}index.html"
fi
-# Erkenne index.php
+# Finde index.php
if [ -f "${FILE}index.php" ]; then
- export URL="${URL}index.php"
- export FILE="${FILE}index.php"
+ URL="${URL}index.php"
+ FILE="${FILE}index.php"
+fi
+
+# Antworte 404 Not Found wenn Datei nicht existiert
+if [ ! -e "$FILE" ]; then
+ STATUS='HTTP/1.0 404 Not Found'
+ CONTENTTYPE='text/plain'
+ FILE="$ERROR404"
fi
diff --git a/writehtml.sh b/writehtml.sh
index 96e5072..642a7be 100644
--- a/writehtml.sh
+++ b/writehtml.sh
@@ -16,5 +16,5 @@ elif [ -f "${FILE}" ]; then
else
export CONTENTTYPE="text/html"
. ./httpheaders.sh
- . ./htmlfilelist.sh
+ . ./filelist.sh
fi