add rc-httpd
This commit is contained in:
parent
0b212ed505
commit
c877493fb0
10 changed files with 616 additions and 0 deletions
54
rc/bin/rc-httpd/handlers/cgi
Executable file
54
rc/bin/rc-httpd/handlers/cgi
Executable file
|
@ -0,0 +1,54 @@
|
|||
#!/bin/rc
|
||||
fn filter_headers{
|
||||
response='HTTP/1.1 200 OK'^$cr
|
||||
lines=''
|
||||
done=false
|
||||
while(~ $done false){
|
||||
line=`{read}
|
||||
head=`{echo $line | awk '{print tolower($1)}'}
|
||||
if(~ $head status:*){
|
||||
tmp=`{echo $line | awk '{$1="" ; print}'}
|
||||
response='HTTP/1.1 '^$"tmp^$cr
|
||||
}
|
||||
if not if(~ $line '')
|
||||
done=true
|
||||
if not
|
||||
lines=$"lines^$"line^$cr^'
|
||||
'
|
||||
}
|
||||
echo $response
|
||||
echo -n $"lines
|
||||
}
|
||||
|
||||
fn run_cgi {
|
||||
path=$cgi_path exec $"cgi_bin $params
|
||||
}
|
||||
|
||||
cgi_bin=$1
|
||||
if(! ~ $cgi_bin /*){
|
||||
pwd=`{pwd}
|
||||
cgi_bin=$"pwd ^ / ^ $cgi_bin
|
||||
}
|
||||
|
||||
cgi_dir=$*($#*)
|
||||
if(! test -d $cgi_dir){
|
||||
cgi_dir=`{basename -d $cgi_dir}
|
||||
cgi_dir=$"cgi_dir
|
||||
}
|
||||
|
||||
if(! test -d $"cgi_dir){
|
||||
error 500
|
||||
exit
|
||||
}
|
||||
if(! test -f $cgi_bin -x $cgi_bin){
|
||||
error 500
|
||||
exit
|
||||
}
|
||||
do_log 200
|
||||
builtin cd $"cgi_dir
|
||||
run_cgi | {
|
||||
filter_headers
|
||||
emit_extra_headers
|
||||
echo $cr
|
||||
exec cat
|
||||
}
|
111
rc/bin/rc-httpd/handlers/dir-index
Executable file
111
rc/bin/rc-httpd/handlers/dir-index
Executable file
|
@ -0,0 +1,111 @@
|
|||
#!/bin/rc
|
||||
PATH_INFO=`{echo $PATH_INFO | urlencode -d}
|
||||
full_path=$"FS_ROOT^$"PATH_INFO
|
||||
full_path=$"full_path
|
||||
if(! test -d $full_path){
|
||||
error 404
|
||||
exit
|
||||
}
|
||||
if(! test -r $full_path -x $full_path){
|
||||
error 503
|
||||
exit
|
||||
}
|
||||
do_log 200
|
||||
builtin cd $full_path
|
||||
if(~ $"NOINDEXFILE ^ $"NOINDEX ''){
|
||||
ifile=index.htm*
|
||||
if(! ~ $ifile(1) *'*'){
|
||||
PATH_INFO=$ifile(1)
|
||||
FS_ROOT=''
|
||||
exec serve-static
|
||||
}
|
||||
}
|
||||
title=`{echo $SITE_TITLE | sed s,%s,^$"PATH_INFO^,}
|
||||
title=$"title
|
||||
lso=()
|
||||
switch($2){
|
||||
case size
|
||||
# ls has no option to sort by size
|
||||
# could pipe it through sort, I suppose
|
||||
case date
|
||||
lso=-t
|
||||
}
|
||||
echo 'HTTP/1.1 200 OK'^$cr
|
||||
emit_extra_headers
|
||||
echo 'Content-type: text/html'^$cr
|
||||
echo $cr
|
||||
echo '<html>
|
||||
<head>
|
||||
<title>'^$title^'</title>
|
||||
<style type="text/css">
|
||||
.size {
|
||||
text-align: right;
|
||||
padding-right: 4pt;
|
||||
}
|
||||
.day {
|
||||
text-align: right;
|
||||
padding-right: 3pt;
|
||||
}
|
||||
.datetime {
|
||||
text-align: right;
|
||||
}
|
||||
.name {
|
||||
text-align: right;
|
||||
padding-left: 3pt;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>'
|
||||
echo '<h1>'^$title^'</h1>'
|
||||
if(! ~ $PATH_INFO /)
|
||||
echo '<a href="../">Parent directory</a>'
|
||||
echo '<table>'
|
||||
ls -lQ $lso | awk '
|
||||
function urlencode(loc){
|
||||
# very minimal encoding, just enough for our static-file purposes
|
||||
url=loc
|
||||
gsub("%", "%25", url) # this one first!
|
||||
gsub("\\$", "%24", url)
|
||||
gsub("&", "%26", url)
|
||||
gsub("\\+", "%2B", url)
|
||||
gsub("\\?", "%3F", url)
|
||||
gsub(" ", "%20", url)
|
||||
gsub("\"", "%22", url)
|
||||
gsub("#", "%23", url)
|
||||
return url
|
||||
}
|
||||
function hrsize(size){
|
||||
if(size > 1073741824) return sprintf("%.1fGB", size/1073741824)
|
||||
if(size > 10485760) return sprintf("%iMB", size/1048576)
|
||||
if(size > 1048576) return sprintf("%.1fMB", size/1048576)
|
||||
if(size > 10240) return sprintf("%iKB", size/1024)
|
||||
if(size > 1024) return sprintf("%.1fKB", size/1024)
|
||||
return sprintf("%iB", size)
|
||||
}
|
||||
/^-/ {
|
||||
print "<tr>"
|
||||
print "<td class=\"size\">"hrsize($6)"</td>"
|
||||
print "<td class=\"month\">"$7"</td>"
|
||||
print "<td class=\"day\">"$8"</td>"
|
||||
print "<td class=\"datetime\">"$9"</td>"
|
||||
$1="" ; $2="" ; $3="" ; $4="" ; $5="" ; $6="" ; $7="" ; $8="" ; $9=""
|
||||
sub("^ *?", "")
|
||||
print "<td><a class=\"file name\" href=\""urlencode($0)"\">"$0"</a></td>"
|
||||
print "</tr>"
|
||||
$0=""
|
||||
}
|
||||
/^d/ {
|
||||
print "<tr>"
|
||||
print "<td class=\"size\"> </td>"
|
||||
print "<td class=\"month\">"$7"</td>"
|
||||
print "<td class=\"day\">"$8"</td>"
|
||||
print "<td class=\"datetime\">"$9"</td>"
|
||||
$1="" ; $2="" ; $3="" ; $4="" ; $5="" ; $6="" ; $7="" ; $8="" ; $9=""
|
||||
sub("^ *?", "")
|
||||
print "<td><a class=\"dir name\" href=\""urlencode($0)"/\">"$0"/</a></td>"
|
||||
print "</tr>"
|
||||
}'
|
||||
echo '</table>
|
||||
|
||||
</body>
|
||||
</html>'
|
38
rc/bin/rc-httpd/handlers/error
Executable file
38
rc/bin/rc-httpd/handlers/error
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/bin/rc
|
||||
# DO NOT make this script callable directly from the web!
|
||||
fn do_error{
|
||||
echo 'HTTP/1.1 '^$1^$cr
|
||||
emit_extra_headers
|
||||
echo 'Content-type: text/html'^$cr
|
||||
echo $cr
|
||||
echo '<html>
|
||||
<head>
|
||||
<title>'^$1^'</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>'^$1^'</h1>'
|
||||
echo $2
|
||||
echo '<p><i>rc-httpd at' $SERVER_NAME '</i>'
|
||||
echo '
|
||||
</body>
|
||||
</html>
|
||||
'
|
||||
}
|
||||
|
||||
fn 404{
|
||||
do_error '404 Not Found' \
|
||||
'The requested path '^$"location^' was not found on this server.'
|
||||
}
|
||||
|
||||
fn 500{
|
||||
do_error '500 Internal Server Error' \
|
||||
'The server has encountered an internal misconfiguration and is unable to satisfy your request.'
|
||||
}
|
||||
|
||||
fn 503{
|
||||
do_error '503 Forbidden' \
|
||||
'You do not have permission to access '^$"location^' on this server.'
|
||||
}
|
||||
|
||||
do_log $1
|
||||
$1
|
30
rc/bin/rc-httpd/handlers/redirect
Executable file
30
rc/bin/rc-httpd/handlers/redirect
Executable file
|
@ -0,0 +1,30 @@
|
|||
#!/bin/rc
|
||||
if(~ $#2 0){
|
||||
error 500
|
||||
exit
|
||||
}
|
||||
switch($1){
|
||||
case perm*
|
||||
do_log 301
|
||||
echo 'HTTP/1.1 301 Moved Permanently'^$cr
|
||||
case temp*
|
||||
do_log 302
|
||||
echo 'HTTP/1.1 302 Moved Temporarily'^$cr
|
||||
case seeother
|
||||
do_log 303
|
||||
echo 'HTTP/1.1 303 See Other'^$cr
|
||||
case *
|
||||
error 500
|
||||
exit
|
||||
}
|
||||
echo 'Location: ' ^ $2 ^ $cr
|
||||
emit_extra_headers
|
||||
echo 'Content-type: text/html'^$cr
|
||||
echo $cr
|
||||
echo '<html><body>'
|
||||
if(~ $#3 0)
|
||||
echo 'Browser did not accept redirect.'
|
||||
if not
|
||||
echo $3
|
||||
echo '<a href="'^$"location^'/">Click here</a>'
|
||||
echo '</body></html>'
|
30
rc/bin/rc-httpd/handlers/serve-static
Executable file
30
rc/bin/rc-httpd/handlers/serve-static
Executable file
|
@ -0,0 +1,30 @@
|
|||
#!/bin/rc
|
||||
full_path=`{echo $"FS_ROOT^$"PATH_INFO | urlencode -d}
|
||||
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
|
||||
type=`{file -m $full_path}
|
||||
if(~ $type text/*)
|
||||
max_age=3600 # 1 hour
|
||||
if not
|
||||
max_age=604800 # 1 week
|
||||
echo 'HTTP/1.1 200 OK'^$cr
|
||||
emit_extra_headers
|
||||
echo 'Content-type: '^$type^$cr
|
||||
echo 'Cache-control: max-age='^$max_age^$cr
|
||||
echo $cr
|
||||
exec cat $full_path
|
14
rc/bin/rc-httpd/handlers/static-or-cgi
Executable file
14
rc/bin/rc-httpd/handlers/static-or-cgi
Executable file
|
@ -0,0 +1,14 @@
|
|||
#!/bin/rc
|
||||
cgiargs=$*
|
||||
|
||||
fn error{
|
||||
if(~ $1 404)
|
||||
exec cgi $cgiargs
|
||||
if not
|
||||
$rc_httpd_dir/handlers/error $1
|
||||
}
|
||||
|
||||
if(~ $location */)
|
||||
exec cgi $cgiargs
|
||||
if not
|
||||
exec serve-static
|
5
rc/bin/rc-httpd/handlers/static-or-index
Executable file
5
rc/bin/rc-httpd/handlers/static-or-index
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/rc
|
||||
if(~ $PATH_INFO */)
|
||||
exec dir-index $params
|
||||
if not
|
||||
exec serve-static
|
86
rc/bin/rc-httpd/rc-httpd
Executable file
86
rc/bin/rc-httpd/rc-httpd
Executable file
|
@ -0,0 +1,86 @@
|
|||
#!/bin/rc
|
||||
rc_httpd_dir=/rc/bin/rc-httpd
|
||||
path=(/bin $rc_httpd_dir/handlers)
|
||||
cgi_path=/bin
|
||||
SERVER_PORT=80 # default for CGI scripts, may be overridden by the Host header
|
||||
extra_headers='Server: rc-httpd'
|
||||
cr=
|
||||
|
||||
fn do_log{
|
||||
echo `{date} :: $SERVER_NAME :: $request :: \
|
||||
$HTTP_USER_AGENT :: $1 :: $HTTP_REFERER >[1=2]
|
||||
}
|
||||
|
||||
fn emit_extra_headers{
|
||||
for(header in $extra_headers)
|
||||
echo $"header^$cr
|
||||
}
|
||||
|
||||
fn getline{ read | sed 's/'^$"cr^'$//g' }
|
||||
|
||||
fn terminate{
|
||||
echo `{date} connection terminated >[1=2]
|
||||
exit terminate
|
||||
}
|
||||
|
||||
fn trim_input{ read -c $CONTENT_LENGTH }
|
||||
|
||||
request=`{getline}
|
||||
if(~ $#request 0)
|
||||
terminate
|
||||
REQUEST_METHOD=$request(1)
|
||||
REQUEST_URI=$request(2)
|
||||
reqlines=''
|
||||
HTTP_COOKIE=''
|
||||
done=false
|
||||
while(~ $"done false){
|
||||
line=`{getline}
|
||||
if(~ $#line 0)
|
||||
done=true
|
||||
reqlines=$"reqlines$"line'
|
||||
'
|
||||
h=`{echo $line | awk '{print tolower($1)}'}
|
||||
switch($h){
|
||||
case ''
|
||||
done=true
|
||||
case host:
|
||||
tmp=`{echo $line(2) | sed 's/:/ /'}
|
||||
SERVER_NAME=$tmp(1)
|
||||
if(! ~ $#tmp 1)
|
||||
SERVER_PORT=$tmp(2)
|
||||
case referer:
|
||||
HTTP_REFERER=$line(2)
|
||||
case user-agent:
|
||||
HTTP_USER_AGENT=`{echo $line | sed 's;[^:]+:[ ]+;;'}
|
||||
case content-length:
|
||||
CONTENT_LENGTH=$line(2)
|
||||
case cookie:
|
||||
cookie=`{echo $line | sed 's;^[^:]+:[ ]*;;'}
|
||||
HTTP_COOKIE=$"HTTP_COOKIE^$"cookie^'; '
|
||||
}
|
||||
}
|
||||
if(~ $REQUEST_URI http://*){
|
||||
SERVER_NAME=`{echo $REQUEST_URI | sed '
|
||||
s;^http://;;
|
||||
s;/.*;;
|
||||
'}
|
||||
REQUEST_URI=`{echo $REQUEST_URI | sed 's;^http://[^/]+/?;/;'}
|
||||
}
|
||||
QUERY_STRING=`{echo $REQUEST_URI | sed 's;[^?]*\??;;'}
|
||||
params=`{echo $QUERY_STRING | sed 's;\+; ;g'}
|
||||
location=`{echo $REQUEST_URI | sed 's;\?.*;;'}
|
||||
location=`{echo $location | sed '
|
||||
s;[^/]+/\.\./;/;g
|
||||
s;/\./;/;g
|
||||
s;//+;/;g
|
||||
'}
|
||||
if(~ $REQUEST_METHOD POST){
|
||||
if(! ~ $"CONTENT_LENGTH '')
|
||||
trim_input | exec $rc_httpd_dir/select-handler
|
||||
if not{
|
||||
echo 'POST without content-length, assuming no keep-alive.' >[1=2]
|
||||
exec $rc_httpd_dir/select-handler
|
||||
}
|
||||
}
|
||||
if not
|
||||
. $rc_httpd_dir/select-handler
|
71
sys/lib/dist/rc/bin/rc-httpd/select-handler
vendored
Executable file
71
sys/lib/dist/rc/bin/rc-httpd/select-handler
vendored
Executable file
|
@ -0,0 +1,71 @@
|
|||
#!/bin/rc
|
||||
|
||||
PATH_INFO=$location
|
||||
FS_ROOT=/sys/doc
|
||||
exec static-or-index
|
||||
|
||||
## EXAMPLES
|
||||
#
|
||||
#SERVER_NAME=`{echo $SERVER_NAME | sed 's/^www\.//g'}
|
||||
#
|
||||
#fn do_error{
|
||||
# do_log $1
|
||||
# echo 'HTTP/1.1 '^$1^$cr
|
||||
# emit_extra_headers
|
||||
# echo 'Content-type: text/html'^$cr
|
||||
# echo $cr
|
||||
# echo '<html>
|
||||
#<head>
|
||||
#<title>'^$1^'</title>
|
||||
#</head>
|
||||
#<body>
|
||||
#<h1>'^$1^'</h1>'
|
||||
# echo $2
|
||||
# echo '<p><i>rc-httpd at' $SERVER_NAME '</i>'
|
||||
# echo '
|
||||
# </body>
|
||||
# </html>
|
||||
# '
|
||||
#}
|
||||
#
|
||||
## surprise!
|
||||
#if(~ $HTTP_REFERER *hiphopstan.com/forum* *slax.*/forum*){
|
||||
# PATH_INFO=$location
|
||||
# FS_ROOT=/usr/sl/www/werc/sites/hotlink
|
||||
# exec static-or-index
|
||||
#}
|
||||
#if(~ $HTTP_REFERER 'http://okturing.com/index.rc?start=100' || {~ $SERVER_NAME okturing.com && ~ $location /index.rc} || ~ $location /qemu/plan9.flp.gz){
|
||||
# do_error '27b/6'
|
||||
# exit
|
||||
#}
|
||||
#
|
||||
## sites
|
||||
#if(~ $SERVER_NAME 1oct1993.com 9front.org *.9front.org emma.stanleylieber.com flamesgif.com gl.* iawtp.com inri.net massivefictions.com mold.dk osx.* other.* pop.* qualitycountrylyrics.com sp.* stanleylieber.com tcasey.* textadventure.* volksutils.com){
|
||||
# PATH_INFO=$location
|
||||
# FS_ROOT=/usr/sl/www/werc/sites/$SERVER_NAME
|
||||
# exec static-or-index
|
||||
#}
|
||||
#if not if(~ $SERVER_NAME 9front.bell-labs.co bell-labs.co cs.bell-labs.co plan9.bell-labs.co sources.cs.bell-labs.co){
|
||||
# PATH_INFO=$location
|
||||
# FS_ROOT=/usr/sl/www/werc/sites/bell-labs.co
|
||||
# exec static-or-index
|
||||
#}
|
||||
#if not if(~ $SERVER_NAME vr.stanleylieber.com){
|
||||
# if(~ $location / /bin/* /etc/* /*htaccess /*htpasswd /index.rc* /lib/* /stats/*){
|
||||
# PATH_INFO=$location
|
||||
# FS_ROOT=/usr/sl/www/werc/sitesvr.stanleylieber.com
|
||||
# exec cgi /usr/sl/www/werc/sites/vr.stanleylieber.com/index.rc $*
|
||||
# }
|
||||
# if not{
|
||||
# PATH_INFO=$location
|
||||
# FS_ROOT=/usr/sl/www/werc/sites/vr.stanleylieber.com
|
||||
# exec static-or-index
|
||||
# }
|
||||
#}
|
||||
#if not if(~ $SERVER_NAME applied.bell-labs.co *cat-v.org flesh.* img.* linux.* notreally.info okturing.com openbsd.* *osuny.co.uk plan9.* read.* scandisk.bell-labs.co * url.*){
|
||||
# PATH_INFO=$location
|
||||
# FS_ROOT=/usr/sl/www/werc/sites/$SERVER_NAME
|
||||
# exec static-or-cgi /usr/sl/www/werc/bin/werc.rc
|
||||
#}
|
||||
#if not
|
||||
# error 503
|
177
sys/man/8/rc-httpd
Normal file
177
sys/man/8/rc-httpd
Normal file
|
@ -0,0 +1,177 @@
|
|||
.TH RC-HTTPD 8
|
||||
.SH NAME
|
||||
rc-httpd \- HTTP server
|
||||
.SH SYNOPSIS
|
||||
.B rc-httpd/rc-httpd
|
||||
.SH DESCRIPTION
|
||||
.I Rc-httpd
|
||||
serves the requested file or an index of files found under
|
||||
a website's root directory, or, in the case of CGI, executes
|
||||
a specified CGI program.
|
||||
.SH CONFIGURATION
|
||||
.PP
|
||||
As all pieces of
|
||||
.B rc-httpd
|
||||
are shell scripts, configuration is achieved by setting variables
|
||||
and adding, removing or modifying commands in various files.
|
||||
.PP
|
||||
.B rc-httpd
|
||||
.PP
|
||||
.I rc_httpd_dir
|
||||
must be set to the root of the rc-httpd installation,
|
||||
the directory containing the rc-httpd script.
|
||||
.PP
|
||||
.I path
|
||||
must include
|
||||
.I rc_httpd_dir/handlers
|
||||
ahead of the base system's path elements.
|
||||
.PP
|
||||
.I cgi_path
|
||||
is substituted for
|
||||
.I path
|
||||
when cgi scripts are run. (Be sure
|
||||
to set
|
||||
.I path
|
||||
back in rc-based cgi scripts.)
|
||||
.PP
|
||||
.I extra_headers
|
||||
is an optional list of strings to emit when sending http headers.
|
||||
.PP
|
||||
.I SERVER_PORT
|
||||
is the port HTTP is to be served on.
|
||||
.PP
|
||||
.B select-handler
|
||||
.PP
|
||||
.I PATH_INFO
|
||||
is the location relative to the website's root directory of the file
|
||||
to be displayed.
|
||||
Typically, the
|
||||
.I location
|
||||
from the incoming request is honored.
|
||||
.PP
|
||||
.I FS_ROOT
|
||||
sets the root directory of the website.
|
||||
.PP
|
||||
.I NOINDEXFILE
|
||||
instructs the
|
||||
.B dir-index
|
||||
module not to
|
||||
look for
|
||||
.B index.html
|
||||
files, otherwise if an
|
||||
.B index.html
|
||||
file is found
|
||||
.B dir-index
|
||||
will exec
|
||||
.B serve-static
|
||||
to serve the file. At present there
|
||||
is no module to serve an index file but not a directory.
|
||||
.PP
|
||||
If you do not want directory indexing at all, replace
|
||||
.B static-or-index
|
||||
with
|
||||
.B serve-static,
|
||||
which will report 503 forbidden for directories.
|
||||
.PP
|
||||
Multiple virtual hosts may be configured by creating conditional
|
||||
statements that act upon the
|
||||
.I SERVER_NAME
|
||||
variable. Fine-grained control of specific request strings may
|
||||
be configured via a similar method acting upon the
|
||||
.I location
|
||||
and/or other variables.
|
||||
.SH EXAMPLES
|
||||
The following examples demonstrate possible ways to configure
|
||||
.BR select-handler.
|
||||
.PP
|
||||
Serve static files:
|
||||
.RS
|
||||
.EX
|
||||
if(~ $SERVER_NAME 9front.org){
|
||||
PATH_INFO=$location
|
||||
FS_ROOT=/usr/sl/www/$SERVER_NAME
|
||||
exec static-or-index
|
||||
}
|
||||
.EE
|
||||
.RE
|
||||
.PP
|
||||
CGI:
|
||||
.RS
|
||||
.EX
|
||||
if(~ $SERVER_NAME *cat-v.org){
|
||||
PATH_INFO=$location
|
||||
FS_ROOT=/usr/sl/www/werc/sites/$SERVER_NAME
|
||||
exec static-or-cgi /usr/sl/www/werc/bin/werc.rc
|
||||
}
|
||||
.EE
|
||||
.RE
|
||||
.PP
|
||||
Custom error message for a denied URL:
|
||||
.RS
|
||||
.EX
|
||||
fn do_error{
|
||||
do_log $1
|
||||
echo 'HTTP/1.1 '^$1^$cr
|
||||
emit_extra_headers
|
||||
echo 'Content-type: text/html'^$cr
|
||||
echo $cr
|
||||
echo '<html>
|
||||
<head>
|
||||
<title>'^$1^'</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>'^$1^'</h1>'
|
||||
echo $2
|
||||
echo '<p><i>rc-httpd at' $SERVER_NAME '</i>'
|
||||
echo '
|
||||
</body>
|
||||
</html>
|
||||
'
|
||||
}
|
||||
if(~ $location /v8.tar.bz2){
|
||||
do_error '27b/6'
|
||||
exit
|
||||
}
|
||||
.EE
|
||||
.RE
|
||||
.SH STARTUP
|
||||
.I Rc-httpd
|
||||
is run from a file in the directory scanned by
|
||||
.IR listen (8),
|
||||
or called as an argument to
|
||||
.IR listen1 (8).
|
||||
The program's standard error may be captured to a log file:
|
||||
.RS
|
||||
.EX
|
||||
exec /rc/bin/rc-httpd/rc-httpd >>[2]/sys/log/www
|
||||
.EE
|
||||
.RE
|
||||
.SH FILES
|
||||
.TF /sys/lib/httpd.rewrite
|
||||
.TP
|
||||
.B /rc/bin/rc-httpd/rc-httpd
|
||||
.TP
|
||||
.B /rc/bin/rc-httpd/select-handlers
|
||||
.TP
|
||||
.B /rc/bin/rc-httpd/handlers/cgi
|
||||
.TP
|
||||
.B /rc/bin/rc-httpd/handlers/dir-index
|
||||
.TP
|
||||
.B /rc/bin/rc-httpd/handlers/error
|
||||
.TP
|
||||
.B /rc/bin/rc-httpd/handlers/redirect
|
||||
.TP
|
||||
.B /rc/bin/rc-httpd/handlers/serve-static
|
||||
.TP
|
||||
.B /rc/bin/rc-httpd/handlers/static-or-cgi
|
||||
.TP
|
||||
.B /rc/bin/rc-httpd/handlers/static-or-index
|
||||
.TP
|
||||
.B /rc/bin/service/tcp80
|
||||
.TP
|
||||
.B /sys/log/www
|
||||
.SH SOURCE
|
||||
.B /rc/bin/rc-httpd
|
||||
.SH "SEE ALSO"
|
||||
.IR rc (1),
|
||||
.IR listen (8)
|
Loading…
Reference in a new issue