{httpd.rewrite}
目次- 1.0.0 Location
- 2.0.0 Function
- 3.0.0 Case study
- 4.0.0 URI
- 5.0.0
/sys/lib/httpd.rewrite - 6.0.0 Web root for real and virtual hosts
- 6.1.0
/usr/bob/www/etc/rewrite - 7.0.0 Format of
/sys/lib/httpd.rewrite - 7.1.0 General rule
- 7.2.0 Meta symbols
- 7.3.0 Format of the first field
- 7.4.0 Format of second field
2003/02/11 Update
Location
/sys/lib/httpd.rewriteFunction
This file has two roles:- specify web root of real host and virtual host
- define URI redirection
Case study
In the explanation below we assume our domain name is:pegasus.goodwill.comAnd we assume five persons:
alice bob carol david emily
alicewants to have her web page inpegasus, that is she want to have following URI:
http://pegasus.goodwill.com/~alice
bobadministrates document of real host. The URI is:
http://pegasus.goodwill.com
and he thinkshttpsshould be used for the access tohttp://pegasus.goodwill.com/private.
carolhopes to have virtual hostcar.goodwill.comin this server and wishes to make use of the host for sales. She has a plan to use two protocolshttpandhttpsand want to have two directories for each protocols.
davidwas a user of this server and now have his home page inhttp://www.eecs.harvard.edu/~david. He want to redirect clients to his new address.
emilywas a user of this server but now she is absent.bobwant to announce clients who is accessing her page that she is removed from the server.
URI
First of all I would like to explain URI(URL) briefly.URI of HTTP is defined as below:
scheme://host[:port][/path][;params][?query]where
[ ]is meta symbol that denotes inside of this symbol can be omitted.
schemeishttporhttps
hostis a domain name of the server. The name must be registered to DNS.
portis a decimal number. if it is omitted then 80 is assumed forhttpand 443 is assumed forhttps
pathis relative path from document root
paramsare defined in HTTP but not be used in major web server such as Apache. Pegasus usesparamsas arguments for CGI. On the other handqueryis passed to CGI as an environment parameter. Here you don't need to know the format ofparamsandqueryexcept that space characters are not be included in them.
User's document is conventionally expressed using the path that begin with
~user in URI, where user is a user name of the system. That is, ~user is expressed as a directory under document root of the host. However implementation need not keep ~user under document root. Rather it would be convenient to have user's document in the directory of the user.
/sys/lib/httpd.rewrite
The below is an example of /sys/lib/httpd.rewrite for our case study.# pattern replacement http://car */usr/carol/www https://car */usr/carol/https /~david http://www.eecs.harvard.edu/~david /~emily */usr/bob/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 host is not full name of the domain.
If the first field begin with
/ 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:
- if it begins with
*, web root is specified
- if it begins with
scheme, redirect client to this URI
Note that the second field that begin with
/ 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:
- if the second field begins with
*, the extra portion of matched path is passed to the name space that is specified by second field.
- if the second fields does not begin with
*, the extra portion of matched path is added to the second fields and redirected to the client
- lines beginning with
httporhttpsare for real host or virtual hosts
- lines beginning with
/~are for users
- lines beginning with
/and not/~are for real host
- first, lines beginning with
schemeare compared with the request. If no lines are matched, then lines beginning with/are examined.
- comparison is done in descending direction.
- stop if a line that matches exists
/paththat begins with/~does not match/
Therefore a line with
/ 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 root for real and virtual hosts
Pegasus permit to have access control files and CGI files not only for real host but also virtual hosts. All the system users who publish web contents have a web root(we refer$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.Pegasus set web root in
/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 web 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 web root /usr/carol/www and usr/carol/https for her virtual host car.A system user
alice can have their personal home page of URI:http://pegasus.goodwill.com/~alicewithout setting in
/sys/lib/httpd.rewrite if she has $home/web/doc. $home/web is her web root.
Note: name of virtual must be register to DNS
2003/02/11 Update
- If parent domain name of virtual host is equal to that of the server, then you can omit the parent domain name. For example virtual host
car.goodwill.comcan be simpllycarif it in inpegasus.goodwill.com.
- If parent domain name of virtual host is not equal to that of the server, then you must write full name. For example virtual host
pegasus.goodwill.orgmust be written as it is if it is in serverpegasus.goodwill.com.
- If a virtual host has own IP, please add the IP as one of hosts.
/usr/bob/www/etc/rewrite
File /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.
Format of /sys/lib/httpd.rewrite
General rule
- lines beginning with
#are comment
- All lines except comment consist of two fields
- Field is separated by spaces
Meta symbols
[ ]denotes we can omit what is inside of this symbols
|denotes selection
:=denotes substitution
- :: left item is explained by right
Format of the first field
First field is one of below:1. scheme://host[:port] 2. /pathwhere
scheme := http | https
host ::host name | full host name | IP
port ::port number
path ::path to document
- lower case for
schemeandhost
- omit
portfor80and443
Format of second field
Second field is one of bellow:1. scheme://hostdom[:port][/path][;params][?query] 2. */pathwhere
params := param[;params]
scheme ::any scheme
hostdom ::full name of the host (pegasus.goodwill.comfor example)
port ::port number
path ::path to the document
params ::argument list that is passed to CGI
query ::query string