/sys/lib/httpd.rewrite
/usr/bob/www/etc/rewrite
/sys/lib/httpd.rewrite
/sys/lib/httpd.rewrite
pegasus.goodwill.com
alice bob carol david emily frank
alice
is a regular user and wants to have her web page in pegasus
, that is she want to have following URI:bob
is a owner of documents on real host. The URI is:https
should be used for the access to http://pegasus.goodwill.com/private
.carol
hopes to have virtual host car.goodwill.com
in this server and wishes to make use of the host for sales. She has a plan to use two protocols http
and https
and want to have two directories for each protocols.david
is a system administrator of goodwill.com.emily
was a user of this server but now she is absent. david
want to announce clients who is accessing her page that she is removed from the server.frank
was a user of this server and now have his home page in http://www.eecs.harvard.edu/~frank
. He want to redirect clients to his new address.scheme://host[:port][/path][;params][?query]
[ ]
is meta symbol that denotes inside of this symbol can be omitted.scheme
is http
or https
host
is a domain name of the server. The name must be registered to DNS.port
is a decimal number. if it is omitted then 80 is assumed for http
and 443 is assumed for https
path
is relative path from document rootparams
are defined in HTTP but not be used in major web server such as Apache. Pegasus uses params
as arguments for CGI. On the other hand query
is passed to CGI as an environment parameter. Here you don't need to know the format of params
and query
except that space characters are not be included in them.scheme://host[:port][/path][?query]
[;params]
" is disappeared, but ';
' is remained as a special character. The semantic is unclear.
Old format works in regular situation, but might make a problem if the URI is in a directory that must be authenticated. For example Mac/Safari fails to be authenticated. Therefore it is wise not to use ';
'.
~user
" in URI, where "user
" is a user name of the system. That is, "~user
" is expressed as a directory under document root of real host. However implementation need not keep "~user
" under the document root. Rather it would be convenient to have user's document in the directory of the user.
/sys/lib/httpd.rewrite
/sys/lib/httpd.rewrite
" for our case study.# pattern replacement http://car */usr/carol/www https://car */usr/carol/https /~frank http://www.eecs.harvard.edu/~frank /~emily */usr/david/www_removed /private https://pegasus.goodwill.com/private / */usr/bob/wwwThe lines in this file consist of two fields except comment line. Fields are separated by spaces.
The first field is a pattern of request. The request is limited only to http
and https
.
host
is the name of real host or virtual host. Note that the host
is not full name of the domain.
Note that we are assuming that the domain name of carol
's page is
car.goodwill.com
pegasus.goodwill.com
carol
's page has another domain name, saycar.bar.com
http://car.bar.com */usr/carol/www
httpd.rewrite
.
/
then the request is regarded as the request to real host or user. That is, we regard scheme://host[:port]
is omitted, where host
is the name of real host.
In second field:
*
', httpd root is specifiedscheme
, redirect client to this URI/
' is not described here. I would like to examine the real needs before I specify such a field.
If the requested URI matches the first field, then we have two cases:
*
', the extra portion of matched path is passed to the name space that is specified by second field.*
', the extra portion of matched path is added to the second fields and redirected to the clienthttp
or https
are for real host or virtual hosts/~
" are for users/
" and not "/~
" are for real hostscheme
are compared with the request. If no lines are matched, then lines beginning with "/
" are examined./path
" that begins with "/~
" does not match "/
"/
" as the first field must be placed at the end
If there is no field in "/sys/lib/httpd.rewrite
" that matches with URI, then Pegasus examines the possibility that the request is to the user.
$web
"), and can have "doc
", "etc
" and "bin
" under the directory; "doc
" is the place where document is located, "etc
" is the place where access control files such as "rewrite
", "allow
", "passwd
" and "handler
" are located, and "bin
" is the place where CGI files are located./sys/lib/httpd.rewrite
". For example, assume bob
administrate the the document of real host and carol
administrate the the document of virtual host car
. Then httpd root is specified in the second field using '*
' followed by the directory path like this:http://car */usr/carol/www https://car */usr/carol/https / */usr/bob/wwwIn this case,
carol
are given two httpd root "/usr/carol/www
" and "usr/carol/https
" for her virtual host "car
".alice
can have their personal home page of URI:http://pegasus.goodwill.com/~alice
/sys/lib/httpd.rewrite
" if she has "$home/web/doc
". Then "$home/web
" is her httpd root.
car.goodwill.com
" can be simplly "car
" if it is in "pegasus.goodwill.com
".pegasus.goodwill.org
" must be written as it is if it is in server "pegasus.goodwill.com
"./usr/bob/www/etc/rewrite
/usr/bob/www/etc/rewrite
" is read after "/sys/lib/httpd.rewrite
". Expression/private https://pegasus.goodwill.com/privatewill be considered in "
$web/etc/rewrite
".
/sys/lib/httpd.rewrite
#
' are comment[ ]
" denotes we can omit what is inside of this symbols|
" denotes selection:=
" denotes substitution::
" left item is explained by right1. scheme://host[:port] 2. /path
scheme := http | https
host ::
host name | full host name | IPport ::
port numberpath ::
path to documentscheme
and host
port
for 80
and 443
1. scheme://hostdom[:port][/path][;params][?query] 2. */path
params := param[;params]
scheme ::
any schemehostdom ::
full name of the host (pegasus.goodwill.com
for example)port ::
port numberpath ::
path to the documentparams ::
argument list that is passed to CGIquery ::
query string