Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
HIAWATHA(1)		    General Commands Manual		   HIAWATHA(1)

NAME
       hiawatha	- advanced and secure webserver

SYNOPSIS
       hiawatha	[options]
       Options:	-c <path>: path	to where the configrationfiles are located.
		-d: don't fork to the background.
		-h: show help and exit.
		-k: check configuration	and exit.
		-m: show enabled modules and exit.
		-v: show version and compile information and exit.

DESCRIPTION
       Hiawatha	 is a secure webserver for Unix. It has	been written with 'be-
       ing secure' and 'easy to	use' as	its main goals.	Hiawatha has  lots  of
       features	 that no other webserver has. Although most of them started as
       an experiment, many of them turned out to be quite effective.

       Hiawatha	has been tested	and runs perfectly on Linux, BSD, MacOS	X  and
       Cygwin.

CONFIGURATION FILES
       Hiawatha	has the	following configuration	files:

       cgi-wrapper.conf
	      See cgi-wrapper(1) for more information.

       hiawatha.conf
	      See  chapters  SERVER CONFIGURATION, BINDING CONFIGURATION, VIR-
	      TUAL HOST	CONFIGURATION, DIRECTORY CONFIGURATION,	 FASTCGI  CON-
	      FIGURATION, URL TOOLKIT and XSLT for more	information.

       mimetype.conf
	      See chapter MIMETYPES for	more information.

       .hiawatha
	      See chapter USER SETTINGS	PER DIRECTORY for more information.

RECORDS
       The  binding, directory,	FastCGI, virtual host and URL toolkit configu-
       ration must be placed inside a record. A	record is defined as follows:

       Record {
	    ...
       }

       where the word "Record" must be replaced	with  "Binding",  "Directory",
       "FastCGIserver",	"VirtualHost" or "UrlToolkit".

SERVER CONFIGURATION
       The global configuration	of the Hiawatha	webserver.

       set variable = value
	      With  'set',  you	 can declare a variable. Make sure the name of
	      the variable doesn't conflict with any of	the configuration  op-
	      tions.  The  variables  are  case-sensitive  and cannot be rede-
	      clared. The variable CONFIG_DIR will be set by Hiawatha  to  the
	      directory	where hiawatha.conf is located.
	      Example: set local_net = 192.168.1.0/24
		       AccessList  =  allow local_net, deny 0.0.0.0/0 (see Ac-
	      cessList for more	information about this option)

       AnonymizeIP = yes|no
	      Anonymize	IP addresses before writing them to the	access and er-
	      ror logfiles.
	      Default =	no     Example:	AnonymizeIP = yes

       BanlistMask = (allow|deny) <ip-address>[/netmask][, (allow|deny)	<ip-
       address>[/netmask], ...]
	      Prevent IPs from getting banned in case of bad behaviour.	By de-
	      fault, all IPs can be banned. IPs	that are 'denied' in the  ban-
	      list will	not be banned.
	      Example: BanlistMask = deny 127.0.0.1, deny 192.168.0.1

       BanOnDeniedBody = <ban-time>
	      Number of	seconds	to ban an IP in	case of	a denied request body.
	      See als DenyBody.
	      Default =	0     Example: BanOnDeniedBody = 120

       BanOnFlooding = <number>/<time>:<ban-time>
	      When  a  client sends more than <number> requests	in <time> sec-
	      onds, the	IP will	be banned for <ban-time> seconds.
	      Default =	-/-:0	  Example: BanOnFlooding = 10/1:15

       BanOnGarbage = <ban-time>
	      Number of	seconds	to ban an IP in	case of	a misformed  HTTP  re-
	      quest  (400  Bad	Request). Webbrowsers normally don't send mis-
	      formed HTTP requests. So in case of a 400	errorcode, someone  is
	      probably trying something	not-so-nice.
	      Default =	0     Example: BanOnGarbage = 60

       BanOnInvalidURL = <ban-time>
	      Number of	seconds	to ban an IP in	case of	an invalid URL.
	      Default =	0     Example: BanOnInvalidURL = 60

       BanOnMaxPerIP = <ban-time>
	      How many seconds a client	will be	banned when the	maximum	number
	      of  simultaneous	connections has	been crossed. See also Connec-
	      tionsPerIP.
	      Default =	2     Example: BanOnMaxPerIP = 5

       BanOnMaxReqSize = <ban-time>
	      Number of	seconds	to ban an IP in	case of	a too large  HTTP  re-
	      quest (413 Request Entity	Too Large). See	also MaxRequestSize.
	      Default =	0     Example: BanOnMaxReqSize = 10

       BanOnSQLi = <ban-time>
	      Number  of seconds to ban	an IP in case of a detected SQL-injec-
	      tion attempt. See	also PreventSQLi.
	      Default =	0     Example: BanOnSQLi = 60

       BanOnTimeout = <ban-time>
	      Number of	seconds	to ban an IP in	case of	a timeout  before  the
	      first request has	been send. See also TimeForRequest.
	      Default =	0     Example: BanOnTimeout = 30

       BanOnWrongPassword = <number>:<ban-time>
	      Number  of  seconds to ban an IP in case of <number> wrong pass-
	      words for	HTTP authentication within a minute.
	      Default =	-:0, Example: BanOnWrongPassword = 3:120

       BlockExtensions = <extension>[,<extension>, ...]
	      Prevent the uploading of files with these	extensions.
	      Example: BlockExtensions = pem, key, exe

       CAcertificates =	<file|directory>
	      Load CA root certificates	which  Hiawatha	 uses  for  validation
	      when acting as a client, which it	does for the reverse proxy and
	      the  websockets. If not set, TLS connections that	Hiawatha makes
	      are not secure.
	      Example: CAcertificates =	/etc/ssl/certs/ca-certificates.crt

       CacheRProxyExtensions = <extension>[, <extension>, ...]
	      Enable the internal cache	for reverse proxy requests  for	 these
	      extensions.
	      Example:	CacheRProxyExtensions  = css, gif, html, jpg, js, png,
	      txt

	      (requires	that Hiawatha was not compiled with -DENABLE_CACHE=off
	      or -DENABLE_RPROXY=off)

       CacheSize = <size in megabytes>
	      Size  of	Hiawatha's  internal  file  cache.  Maximum  is	  1024
	      (megabytes).
	      Default =	10     Example:	CacheSize = 25

	      (requires	  that	 Hiawatha   was	  not	compiled   with	 -DEN-
	      ABLE_CACHE=off)

       CacheMaxFilesize	= <size	in kilobytes>
	      Maximum size of a	file  Hiawatha	will  store  in	 its  internal
	      cache.
	      Default =	256	Example: CacheMaxFilesize = 128

	      (requires	  that	 Hiawatha   was	  not	compiled   with	 -DEN-
	      ABLE_CACHE=off)

       CGIextension = <extension>[, <extension>, ...]
	      Default extension	of a CGI program.
	      Example: CGIextension = cgi

       CGIhandler = <CGI handler>:<extension>[,	<extension>, ...]
	      Specify the handler for a	CGI extension. A handler  is  an  exe-
	      cutable which will run the CGI script.
	      Example: CGIhandler = /usr/bin/php5-cgi:php,php5

       CGIwrapper = <CGI wrapper>
	      Specify  the  wrapper for	CGI processes. A secure	CGI wrapper is
	      included in the Hiawatha package (see  cgi-wrapper(1)  for  more
	      information).
	      Default  = /usr/local/sbin/cgi-wrapper	 Example: CGIwrapper =
	      /bin/cgi-wrapper

       ChallengeClient = <threshold>, (httpheader|javascript), <ban-time>[,
       <secret>]
	      Challenge	the client to verify that it's a real web browser  and
	      not  an  HTTP  bot. When the total amount	of connections reaches
	      <threshold>, Hiawatha sends a response to	the first request in a
	      connection which will make the client resend  the	 request,  but
	      now  with	a cookie. The cookie can be set	via an HTTP Set-Cookie
	      header or	a Javascript. Further requests are only	accepted  when
	      the  client  sends  this cookie. Otherwise, the client is	banned
	      for <ban-time> seconds. This feature can be used to  reduce  the
	      effects of a DDoS	attack.	The <secret> can be a random string of
	      up  to 20	characters (the	rest is	ignored) and is	used to	gener-
	      ate the cookie. When not set, Hiawatha will  generate  a	random
	      secret.
	      Example: ChallengeClient = 200, httpheader, 60

       ConnectionsPerIP	= <number>
	      Maximum  number  of simultaneous connections per IP address. See
	      also RequestLimitMask.
	      Default =	15     Example:	ConnectionsPerIP = 50

       ConnectionsTotal	= <number>
	      Maximum number of	simultaneous connections.
	      Default =	150	Example: ConnectionsTotal = 1000

       EnableHTTP2 = yes|no
	      Enables support for the HTTP/2 protocol.
	      Default =	no     Example:	EnableHTTP2 = yes

	      (requires	that Hiawatha was compiled with	-DENABLE_HTTP2=on)

       EnableSandbox = yes|no
	      Enables the OS sandbox in	Hiawatha.
	      Default =	no     Example:	EnableSandbox =	yes

	      (requires	that Hiawatha was compiled with	-DENABLE_SANDBOX=on)

       ExploitLogfile =	<filename with full path>
	      Logfile for all exploit attempts:	CSRF, denied bodies,  SQL  in-
	      jection and XSS
	      Default =	/var/log/hiawatha/exploit.log	  Example: ExploitLog-
	      file = /var/log/exploit_attempts.log

       GarbageLogfile =	<filename with full path>
	      Logfile for all misformed	HTTP requests. Be careful when reading
	      this file, as requests may contain terminal injections.
	      Example: GarbageLogfile =	/var/log/hiawatha/garbage.log

       GZipExtensions =	<extension>[, <extension>, ...]
	      Add  extensions  to the list of extensions of the	files Hiawatha
	      will compress before uploading. Files with  the  text/*  or  im-
	      age/svg+xml mimetype will	also be	compressed.
	      Default  = cer,crt,doc,pem,ppt,ttf,xls,xml,xsl,xslt     Example:
	      GZipExtensions = json

       HideProxy = <ip-address>[/netmask][, <ip-address>[/netmask], ...]
	      A	request	sent from the supplied IP address will be searched for
	      a	X-Forwarded-For	header.	When found, the	 last  IP  address  in
	      that  field will be used as the client IP	address. Make sure you
	      only allow trusted reverse proxies in this IP list.
	      Example: HideProxy = 192.168.10.20

       Include <filename>|<directory>
	      Include another configuration file or configuration files	 in  a
	      directory.
	      Example: Include /usr/local/etc/hiawatha/hosts.conf

       KickOnBan = yes|no
	      Close  all  other	connections that originate from	the same IP in
	      case of a	ban.
	      Default =	no     Example:	KickOnBan = yes

       KillTimedoutCGI = yes|no
	      If a CGI process times out (see  TimeForCGI  for	more  informa-
	      tion), Hiawatha will send	a TERM signal to the CGI process, wait
	      1	 second	 and  then send	a KILL signal to the CGI process. This
	      option has no effect on FastCGI jobs.
	      Default =	yes	Example: KillTimedoutCGI = no

       ListenBacklog = <value>
	      The backlog value	for the	listen() system	call. This  value  de-
	      fines the	size of	the waiting queue for incoming connections.
	      Default =	16     Example:	ListenBacklog =	128

       LogfileMask = (allow|deny) <ip-address>[/netmask][, (allow|deny)	<ip-
       address>[/netmask], ...]
	      List  of	IPs  from which	HTTP requests will be logged. If an IP
	      does not match an	entry in the list, the request will be logged.
	      Example: LogfileMask = deny 10.0.0.0/24

       LogFormat = hiawatha|common|extended
	      Define the format	of the logfile:	hiawatha = Hiawatha's  default
	      format,  common  = Common	Log Format, extended = Extended	Common
	      Log Format.
	      Default =	hiawatha     Example: LogFormat	= extended

       LogTimeouts = yes|no
	      Log connection timeouts in the system logfile.
	      Default =	yes	Example: LogTimeouts = no

       MaxServerLoad = <value>
	      When the server has a load higher	than  <value>,	Hiawatha  will
	      drop  incoming connections. This options is only available under
	      Linux.
	      Example: MaxServerLoad = 0.7

       MaxUrlLength = <value>
	      The maximum length of the	path of	an URL that the	webserver  ac-
	      cepts  as	 being valid. Otherwise, a 414 error code is returned.
	      The value	'none' disables	this check.
	      Default =	1000	 Example: MaxUrlLength = 500

       MimetypeConfig =	<configuration file>
	      The location of the mimetype configuration file. It the path  is
	      omitted, Hiawatha's configuration	file directory will be used.
	      Default	 =   mimetype.conf	 Example:   MimetypeConfig   =
	      /etc/mime.types

       MonitorServer = <ip-address>
	      Specify the IP address of	the Hiawatha Monitor server. This  en-
	      ables logging of statistical information.	Use a X-Hiawatha-Moni-
	      tor  CGI header to log an	event. Use the value 'failed_login' to
	      log a failed login or 'exploit_attempt' to log  an  exploit  at-
	      tempt.
	      Example: MonitorServer = 192.168.1.2

	      (requires	that Hiawatha was compiled with	-DENABLE_MONITOR=on)

       PIDfile = <filename>
	      The  name	 of the	file in	which Hiawatha will write its process-
	      ID. Don't	change unless you know what you	are  doing  (the  CGI-
	      wrapper and the MacOS X preference pane need the PID-file	at its
	      default location).
	      Default =	/var/run/hiawatha.pid	  Example: PIDfile = /data/hi-
	      awatha.pid

       Platform	= cygwin|windows
	      If  set  to 'windows', Hiawatha will convert the Unix-style path
	      to CGI programs to a Windows-style path.
	      Default =	windows	    Example: Platform =	cygwin

	      This option is only available in the Windows (Cygwin) version of
	      Hiawatha.

       RebanDuringBan =	yes|no
	      Reset the	ban-time when a	client tries  to  reconnect  during  a
	      ban.
	      Default =	no     Example:	RebanDuringBan = yes

       ReconnectDelay =	<time>
	      The  number  of seconds Hiawatha will remember the IP address of
	      the connection and pretend the client  is	 still	connected.  In
	      combination  with	 ConnectionsPerIP, this	can be used to prevent
	      flooding.	Note that the BanOnMaxPerIP ban-timer  will  be	 used,
	      not the BanOnFlooding ban-timer. Causes some load	on the server.
	      Default =	0     Example: ReconnectDelay =	3

       RequestLimitMask	= (allow|deny) <ip-address>[/netmask][,	(allow|deny)
       <ip-address>[/netmask], ...]
	      Define  for  which clients the ConnectionsPerIP, MaxRequestSize,
	      TimeForRequest and PreventSQLi settings should not be  used.  If
	      an  IP  is allowed or not	listed,	the mentioned settings will be
	      used.
	      Example: RequestLimitMask	= deny 192.168.0.1

       ServerId	= <userid>|<userid>:<groupid>[,	<groupid>, ...]
	      The userid and groupid(s)	the server will	change to. If  only  a
	      userid  is  specified,  the  groupid(s)  will  be	 looked	 up in
	      /etc/passwd and /etc/group. The userid en	groupid	of  user  root
	      are not allowed here. The	userid or groupid can also be a	name.
	      Default =	65534:65534	Example: ServerId = www-data

       ServerString = <text>
	      The  text	behind 'Server:' in the	HTTP header of a response. Use
	      'none' to	completely remove the  Server  string  from  the  HTTP
	      header.
	      Default =	Hiawatha v<version>	Example: ServerString =	myWeb-
	      server

       SetResourceLimits = yes|no
	      Let  Hiawatha  set the resource limits for number	of threads and
	      file descriptors.
	      Default =	yes	Example: SetResourceLimits = no

       SocketSendTimeout = <time>
	      Sets the SO_SNDTIMEO value for all  client  connection  sockets.
	      Use 0 to disable this feature.
	      Default =	3     Example: SocketSendTimeout = 10

       Syslog =	[system][, exploit][, garbage][, access][, error][,
       all][;<syslog identifier>]
	      Log information to syslog.
	      Example: Syslog =	system,	access,	error

       SystemLogfile = <filename with full path>
	      Logfile for all system- and errormessages.
	      Default  =  /var/log/hiawatha/system.log	   Example: SystemLog-
	      file = /var/log/hiawatha.sys

       ThreadKillRate =	<amount>
	      At startup, Hiawatha starts the amount of	threads	 as  specified
	      by  ThreadPoolSize.  When	 more  threads	are required, Hiawatha
	      spawns them on the fly. When those extra threads are  no	longer
	      needed, max <amount> threads are killed per 10 seconds.
	      Default =	1     Example: ThreadKillRate =	10

       ThreadPoolSize =	<size>
	      Initial size of the thread pool.
	      Default =	25     Example:	ThreadPoolSize = 50

       Throttle	= (<main-mimetype>/[<sub-mimetype>]|.<extension>):<speed in
       kB/s>
	      Control the upload speed of certain files.
	      Example: Throttle	= audio/mpeg:30
		       Throttle	= .mp:50

       Tomahawk	= <port	number>, <MD5 hash of password>
	      The  port	 and  the password for Tomahawk. You can use telnet to
	      connect to Tomahawk (localhost:<port number>). Once connected to
	      Tomahawk,	type 'help' for	more information.
	      Example: Tomahawk	= 81,41d0c72bd73afaa2c207064d81d5a3d9

	      (requires	that Hiawatha was compiled with	-DENABLE_TOMAHAWK=on)

       TunnelSSH = <ip-address>[, <ip-address>,	...][; <authentication code>]
	      This option allows you to	connect	to  the	 SSH  daemon  on  your
	      server  when  port 22 is blocked by a firewall. The parameter of
	      this option is the IP address from where you want	to connect  to
	      your  server.  In	 PuTTY and WinSCP, use the HTTP	proxy type and
	      enable the 'Consider proxying local  host	 connections'  option.
	      Use  'localhost'	as  the	hostname and your server's hostname as
	      the proxy	hostname.  Optionally, you can set  an	authentication
	      code,  which  is base64(<username>:<password>). The username and
	      password are for in the PuTTY proxy page.	When set, you can con-
	      nect from	any IP address you want.
	      Example: TunnelSSH = 123.45.67.89

       UserDirectory = <directory>
	      The name of the web directory in a user's	 home  directory  (see
	      UserWebsites for more information).
	      Default =	public_html	Example: UserDirectory = website

       WaitForCGI = yes|no
	      Lets  Hiawatha  wait for CGI processes to	finish after receiving
	      the last output byte (via	waitpid() call)	or not (SIGCHLD	set to
	      SIG_IGN).
	      Default =	yes	Example: WaitForCGI = no

       WorkDirectory = <path>
	      The directory where Hiawatha can temporarily store files for up-
	      loading and the Monitor. Note that Hiawatha will change the own-
	      ership and access	rights of this directory for security reasons.
	      So, don't	use existing direcories	like /tmp.
	      Default =	/var/db/hiawatha     Example: WorkDirectory = /tmp/hi-
	      awatha

       WrapUserCGI = yes|no
	      Always use the CGI-wrapper when handling	CGI  scripts  in  user
	      websites	(see UserWebsites for more information). The userid of
	      the owner	of the website will be used.
	      Default =	no     Example:	WrapUserCGI = yes

BINDING	CONFIGURATION
       A binding is where a client can connect to (a port on a network	inter-
       face).

       BindingId = <binding_id>
	      The  binding  ID can be used to hook a virtual host to a binding
	      (see RequiredBinding for more information).
	      Example: BindingId = LAN

       EnableAccf = yes|no
	      Enable the  HTTP	accept	filter.	 This  is  only	 available  on
	      FreeBSD. This requires the accf_http kernel module to be loaded.
	      Default =	no     Example:	EnableAccf = yes

       EnableAlter = yes|no
	      Enable  the  PUT and DELETE HTTP request method for this binding
	      (see AlterList and UploadDirectory for more information).
	      Default =	no     Example:	EnableAlter = yes

       EnableTRACE = yes|no
	      Enable the TRACE HTTP request method for this binding.
	      Default =	no     Example:	EnableTRACE = yes

       H2MaxConcurrentStreams
	      The maximum amount of concurrent HTTP/2 streams within  one  TCP
	      connection.
	      Default =	128    Example:	H2MaxConcurrentStreams = 256

	      (requires	that Hiawatha was compiled with	-DENABLE_HTTP2=on)

       H2MaxRequests
	      The maximum amount of HTTP/2 requests within one TCP connection.
	      Default =	1000   Example:	H2MaxConcurrentStreams = 2000

	      (requires	that Hiawatha was compiled with	-DENABLE_HTTP2=on)

       Interface = <IP address>
	      The IP address of	the interface that must	be binded.
	      Default =	0.0.0.0	(IPv4)	   Example: Interface =	192.168.0.1

       MaxKeepAlive = <number>
	      Maximum  number  of  stay-alives	after the first	request. After
	      that, the	connection will	be closed. Of course, the browser  can
	      reconnect.  But  this  gives  other users	a chance to connect in
	      case of a	'crowded' webserver.
	      Default =	50     Example:	MaxKeepAlive = 100

       MaxRequestSize =	<size>
	      The maximum size of a request in kilobytes the webserver is  al-
	      lowed  to	 receive. This does not	include	PUT requests. See also
	      RequestLimitMask.
	      Default =	64     Example:	MaxRequestSize = 256

       MaxUploadSize = <size>
	      The maximum size of a PUT	request	entity in megabytes  the  web-
	      server   is  allowed  to	receive.  The  maximum	size  is  2047
	      megabytes.
	      Default =	1     Example: MaxUploadSize = 15

       Port = <port number>
	      The port number that will	be used	for the	binding. This is a re-
	      quired option.
	      Example: Port = 80

       RequiredCA = <CA	certificate file>[, <CA	CRL file>
	      Use the CA certificates in  this	file  to  authenticate	users.
	      Users  without a certificate from	one of the listed CAs will not
	      be allowed.
	      Example: RequiredCA = /etc/ssl/cacert.pem, /etc/ssl/cacrl.pem

	      (requires	that Hiawatha was not compiled with -DENABLE_TLS=off)

       TLScertFile = <TLS private key and certificate file>
	      Encrypt the connections of the current binding with the TLS pri-
	      vate key and certificate in  the	specified  file.  Intermediate
	      certificates  also  go in	this file. Make	sure the order matches
	      the TLS chain order:  host  certificate  first,  CA  certificate
	      last. Use	the tool 'lefh'	(Let's Encrypt For Hiawatha) to	obtain
	      and maintain Let's Encrypt certificates.
	      Example: TLScertFile = my_domain.pem

	      (requires	that Hiawatha was not compiled with -DENABLE_TLS=off)

       TimeForRequest =	[<time1>, ]<time2>
	      Maximum  time  in	seconds	for a client to	send its HTTP request.
	      time1 is for the first request, time2 is for the	following  re-
	      quests (Keep-Alive time).	If time2 is omitted, time1 is used for
	      all requests. See	also RequestLimitMask.
	      Default =	5, 30	  Example: TimeForRequest = 2, 45

VIRTUAL	HOST CONFIGURATION
       The  (virtual) hosts the	webserver will be serving. The first host must
       NOT be placed inside a record. This is the default  host	 and  therefor
       not  virtual. It	is wise	to have	the IP-address of the webserver	as the
       Hostname	of the default host and	give it	a blank	page.  Automated  vul-
       nerable-website scanners	will not find your possible vulnerable website
       if you do so.

       AccessList = (allow|deny|pwd) <ip-address>[/netmask][, (allow|deny|pwd)
       <ip-address>[/netmask], ...]
	      Define  which  IPs have access to	the website. If	an IP does not
	      match an entry in	the list, access is granted. 'all' is an alias
	      for 0.0.0.0/0. The IP address of the machine that	 connects  and
	      the  IP  address	specified  in the X-Forwarded-For header field
	      (deny only) will be used to find a match.	'allow'	gives  access,
	      'deny'  denies access and	'pwd' gives access if a	valid password
	      has been given (see PasswordFile for more	information).
	      Hiawatha	will  ignore  this  setting  for  files	  in   /.well-
	      known/acme-challenge/,  which are	used for authentication	in the
	      Let's Encrypt certificate	request	process.
	      Example: AccessList = deny 10.0.0.13,  allow  10.0.0.0/24,  deny
	      all

       AccessLogfile = <filename with full path>[,daily|monthly|weekly]|none
	      Logfile  for  the	 HTTP  requests. Hiawatha can rotate them on a
	      daily, weekly or monthly basis. Use 'none' to disable the	access
	      log.
	      Default =	/var/log/hiawatha/access.log	  Example:  AccessLog-
	      file = /var/log/hiawatha.acc, weekly

       Alias = <softlink>:<directory>
	      An  alias	is a virtual softlink to a directory. Every request to
	      <websiteroot>/<softlink> will be rerouted	to <directory>.
	      Example: Alias = /doc:/usr/share/doc

       AllowDotFiles = <yes|no>
	      Allow files that start with a dot	(hidden	files for Unix)	to  be
	      downloaded  by a client. Requests	for .hiawatha files are	always
	      blocked. A requests URI that start with /.well-known/ is	always
	      accepted,	as defined in RFC 5785.
	      Default =	no     Example:	AllowDotFiles =	yes

       AlterGroup = <groupname>[, <groupname>, ...]
	      The <groupname> is the name of the group a user must be a	member
	      of  to  use the PUT and DELETE HTTP method (see PasswordFile and
	      AlterList	for more information).
	      Example: AlterGroup = publishers

       AlterList = (allow|deny|pwd) <ip-address>[/netmask][, (allow|deny|pwd)
       <ip-address>[/netmask], ...]
	      Define which IPs are allowed to use the PUT and DELETE HTTP  re-
	      quest  method. If	an IP does not match an	entry in the list, us-
	      age is denied. 'all' is an alias for 0.0.0.0/0. The  IP  address
	      of the machine that connects and the IP address specified	in the
	      X-Forwarded-For  header field (deny only)	will be	used to	find a
	      match. Look out for the uploading	 of  CGI  scripts!  Use	 "Exe-
	      cuteCGI  =  no"  in  a Directory record to disable CGI execution
	      (see EnableAlter,	AlterGroup and	AlterMode  for	more  informa-
	      tion).
	      Example: AlterList = deny	10.0.0.13, allow 10.0.0.0/24, deny all

       AlterMode = <filemode>
	      The  files  that	are created via	PUT will have the file permis-
	      sions set	to <filemode> (see AlterList for more information).
	      Default =	640	Example: AlterMode = 664

       BanByCGI	= yes|no[, <max	value>]
	      Allow a CGI application to ban a client via  a  'X-Hiawatha-Ban:
	      <value>'	CGI header. The	value is the maximum amount of seconds
	      a	CGI application	is allowed to ban a client.
	      Default =	no     Example:	BanByCGI = yes

       CustomHeaderClient = <key>: <value>
	      Set a custom HTTP	header for every response sent to the client.
	      Example: CustomHeaderClient = Access-Control-Allow-Origin: *

       CustomHeaderBackend = <key>: <value>
	      Set a custom HTTP	header for  every  request  forwarded  to  the
	      backend while acting as a	reverse	proxy.
	      Example: CustomHeaderBackend = X-Custom-Header: some_value

	      (requires	  that	 Hiawatha   was	  not	compiled   with	 -DEN-
	      ABLE_RPROXY=off)

       DenyBody	= <regular expression>
	      If the request body matches the case insensitive	POSIX  regular
	      expression, return a 403 Forbidden.
	      Example: DenyBody	= ^.*%3Cscript.*%3C%2Fscript%3E.*$

       EnablePathInfo =	yes|no
	      Accepts  URLs like /index.php/parameter if /index.php exists and
	      the extension .php has been configured as	a CGI program. '/para-
	      meter' will be placed in the environment variable	PATH_INFO.
	      Default =	no     Example:	EnablePathInfo = yes

       EnforceFirstHostname = yes|no
	      If the hostname used in the URL is not the same as the first one
	      in the list of the Hostname setting, then	Hiawatha will  send  a
	      301  redirect  with that hostname. This option is	ignored	if the
	      first hostname starts with a wildcard.
	      Default =	no     Example EnforceFirstHostname = yes

       ErrorHandler = <error code>:<filename>[?key=value&...]
	      When a 401, 403, 404, 501	or 503 error occures, this  file  will
	      be send to the browser. The WebsiteRoot and the ErrorHandler to-
	      gether  must  form  the complete path to the file. The generated
	      errorcode	can be found via the environment variable  HTTP_GENER-
	      ATED_ERROR.  To override the returned HTTP code in a CGI script,
	      use the HTTP Header "Status", for	example	"Status: 404".
	      Example: ErrorHandler = 404:/error.php?code=404

       ErrorLogfile = <filename	with full path>
	      Logfile for the messages that have been written to stdout	by CGI
	      processes.
	      Default =	/var/log/hiawatha/error.log	Example:  ErrorLogfile
	      =	/var/log/hiawatha.err

       ErrorXSLTfile = <XSLT file with full path>
	      In case of an error, use the specified XSLT file to generate the
	      error  message.  Upon  any error,	Hiawatha will fall back	to the
	      hardcoded	error message. An example of the  generated  XML  that
	      will  be	used can be found in extra/error.xml inside the	source
	      package.
	      Example: ErrorXSLTfile = /usr/local/etc/hiawatha/error.xslt

	      (requires	that Hiawatha was not compiled with -DENABLE_XSLT=off)

       ExecuteCGI = yes|no
	      Allow execution of CGI programs.
	      Default =	no     Example:	ExecuteCGI = yes

       FileHashes = <file containing file hashes>
	      Points Hiawatha to a file	containing  SHA256  hashes  for	 every
	      file  in	the webroot directory. Before serving a	file, Hiawatha
	      checks the file hash of that file. If it doesn't	match,	access
	      is  denied.  This	 protects against file changes or uploading of
	      malware. FastCGI scripts are also	checked	if the FastCGI	server
	      can  be  reached	via a UNIX socket. The file hashes file	can be
	      created via the -s option	of the wigwam(1) tool.
	      Example:	FileHashes  =	/usr/local/etc/hiawatha/hashes/my_web-
	      site.txt

       FollowSymlinks =	yes|no
	      Allow Hiawatha to	follow symlinks	to files and directories. Sym-
	      links  that stay inside the webroot or are owned by root are al-
	      ways followed. Note that this does not apply to CGI's which  are
	      executed	via  FastCGI, because Hiawatha is not able to look for
	      symlinks on remote FastCGI servers.
	      Default =	no     Example:	FollowSymlinks = yes

       Hostname	= <hostname>, [<hostname>, ...]
	      Name(s) of the host that Hiawatha	will  be  serving.  May	 start
	      with  a wildcard,	except the first hostname (a valid name	is re-
	      quired in	case of	a 301 error). Hostname is a required field.
	      Example:	 Hostname   =	www.my-domain.com,    *.my-domain.com,
	      www.some-alias.com

       HTTPAuthToCGI = yes|no
	      Place the	HTTP Authorization header in the CGI's HTTP_AUTHORIZA-
	      TION environment variable.
	      Default =	no     Example:	HTTPAuthToCGI =	yes

       LoginMessage = <text>
	      Message  that  will  be displayed	in the login window in case of
	      HTTP authentication (see	PasswordFile  for  more	 information).
	      When  using  Digest HTTP authentication, the LoginMessage	should
	      not contain a ':'	sign.
	      Default =	Private	page	 Example: LoginMessage =  My  personal
	      files

       NoExtensionAs = <extension>
	      If  the  requested file has no extension,	treat it as if the ex-
	      tension was equal	to <extension>.
	      Example: NoExtensionAs = cgi

       PasswordFile = ((Basic|Digest):<passwordfile>)|none[, <groupfile>]
	      When this	option is set, HTTP authentication is enabled. Use the
	      full path	to the password	file when that	password  file	should
	      also  be used for	sub-directories. Entries for the password file
	      can be created via the wigwam(1) tool. The realm for Digest HTTP
	      authentication must be equal to the text set via LoginMessage.
	      The <groupfile> contains the groupnames followed by the names of
	      the users	that are a member of that group.  The  format  of  the
	      lines in the groupfile is:
		   <groupname>:<username>[ <username> ...]
	      Hiawatha	 will	ignore	this  setting  for  files  in  /.well-
	      known/acme-challenge/, which are used for	authentication in  the
	      Let's Encrypt certificate	request	process.
	      Example:	      PasswordFile	 =	 basic:/var/www/.pass-
	      words,/var/www/.groups

       PreventCSRF = no|detect|prevent|block
	      Prevent Cross-Site Request Forgery attacks. The 'detect'	option
	      only detects and logs a CSRF attack, 'prevent' discards the POST
	      data  and	 cookies and 'block' returns a 443 error. This setting
	      can cause	problems for users who use tools  to  hide/remove  the
	      Referer HTTP header string while browsing.

	      Don't  use  this	as  a generic security feature.	Only use it to
	      prevent a	specific vulnerablility	in an application  that	 can't
	      be taken offline while you wait for a patch.
	      Default =	no     Example:	PreventCSRF = block

       PreventSQLi = no|detect|prevent|block
	      Prevent  SQL-injection attacks. The 'detect' option only detects
	      and logs an SQL injection	attack,	'prevent' returns a 404	 error
	      and  'block'  returns a 441 error. It is important to understand
	      that the detection of SQL	injections is  done  by	 best  effort.
	      There  is	no 100%	guarantee that all SQL injections are blocked.
	      Note that	using this feature can have a negative effect  on  the
	      performance  of  your webserver and can make the exploit logfile
	      grow very	large. See also	BanOnSQLi and RequestLimitMask.

	      Don't use	this as	a generic security feature.  Only  use	it  to
	      prevent  a  specific vulnerablility in an	application that can't
	      be taken offline while you wait for a patch.
	      Default =	no     Example:	PreventSQLi = detect

       PreventXSS = no|detect|prevent|block
	      Prevent Cross-Site Scripting attacks. The	'detect'  option  only
	      detects  and  logs a XSS attack, 'prevent' disables the <script>
	      tag in the input and 'block' returns a 442 error.

	      Don't use	this as	a generic security feature.  Only  use	it  to
	      prevent  a  specific vulnerablility in an	application that can't
	      be taken offline while you wait for a patch.
	      Default =	no     Example:	PreventXSS = prevent

       RequiredBinding = <binding_id>[,	<binding_id>, ...]
	      By default, a virtual host can be	visited	via all	bindings.  Via
	      this  opion,  you	 can specify via which bindings	a virtual host
	      can be visited (see chapter BINDING CONFIGURATION	for  more  in-
	      formation).
	      Example: RequiredBinding = LAN

       RandomHeader = <length>
	      Adds  an	X-Random HTTP header to	the response for HTTPS connec-
	      tions. The header	contains a random string. The length  of  that
	      string  is  a  random  value between 1 and <length>. This	header
	      helps to prevent attackers from guessing what file was requested
	      based on the response length. <length> must be  between  10  and
	      1000.
	      Example: RandomHeader = 250

       RequiredCA = <CA	certificate file>[, <CA	CRL file>
	      Use  the	CA  certificates  in  this file	to authenticate	users.
	      Users without a certificate from one of the listed CAs will  not
	      be allowed.
	      Example: RequiredCA = /etc/ssl/cacert.pem, /etc/ssl/cacrl.pem

	      (requires	that Hiawatha was not compiled with -DENABLE_TLS=off)

       RequiredGroup = <groupname>[, <groupname>, ...]
	      The <groupname> is the name of the group a user must be a	member
	      of to have access	(see PasswordFile for more information).
	      Example: RequiredGroup = webadmins,staff

       RequireTLS = yes|no[, <HSTS time>[d]][; includeSubDomains][; preload]
	      Specify  that a domain must be visited with a TLS	connection. If
	      it is visited via	HTTP, Hiawatha will send a redirect (301) with
	      an HTTPS URL. The	<HSTS  time>  is  the  max-age	value  of  the
	      Strict-Transport-Security	HTTP header in seconds or in days when
	      it ends with a 'd'.
	      Hiawatha	 will	ignore	this  setting  for  files  in  /.well-
	      known/acme-challenge/, which are used for	authentication in  the
	      Let's Encrypt certificate	request	process.
	      Default =	no     Example:	RequireTLS = yes, 2678400

	      (requires	that Hiawatha was not compiled with -DENABLE_TLS=off)

       ReverseProxy = [!]<pattern> [<skip directories>]	http[s]://<host-
       name>[:<port>][/<path>]|<unix-socket> [<timeout>] [keep-alive]
	      Forward  the  request with URLs that match the POSIX regular ex-
	      pression <pattern> to a web application that speaks HTTP	or  to
	      another  webserver,  where  <path> is placed before the original
	      URL. When	<hostname> is an IP address, the  value	 of  the  Host
	      HTTP  header  is	unchanged.  Otherwise, it is replaced with the
	      value of <hostname>. The optional	<skip directories> is a	number
	      that indicates how many directories in the original  URL	should
	      be  skipped  when	 forwarding it.	The connection is closed after
	      <timeout>	seconds, which is set to 5 seconds by default. By  de-
	      fault,  Hiawatha doesn't use keep-alive connections. You can en-
	      able this	by adding 'keep-alive' to the configuration line. When
	      specifying multiple reverse proxies for one (virtual) host,  Hi-
	      awatha prefers reverse proxies with a scheme (HTTP/HTTPS)	match-
	      ing the one of the client	connection. See	also CAcertificates.
	      Note  that this funcionality was originally included in Hiawatha
	      to host web applications that only speak HTTP. It	was never  in-
	      tended  to make Hiawatha function	as a full blown	reverse	proxy.
	      Be careful when using this feature in production environments.
	      Hiawatha	will  ignore  this  setting  for  files	  in   /.well-
	      known/acme-challenge/,  which are	used for authentication	in the
	      Let's Encrypt certificate	request	process.
	      Example: ReverseProxy = ^/icons/ 1 http://resources.lan/images

	      (requires	 that	Hiawatha   was	 not   compiled	  with	 -DEN-
	      ABLE_RPROXY=off)

       RunOnAlter = <path to program>
	      Run a program after a client has sent a PUT or a DELETE request.
	      Information  about  the  request	is placed in environment vari-
	      ables, just like CGI
	      Example: RunOnAlter = /usr/local/sbin/alter-script

       Setenv <key> = <value>
	      Define environment settings for CGI programs.
	      Example: Setenv PHPRC = /var/www/conf

       ScriptAlias = <softlink>:<script>
	      A	script alias is	a virtual softlink to a	CGI script. Every  re-
	      quest to <websiteroot>/<softlink>	will be	rerouted to <script>.
	      Example: ScriptAlias = /script.cgi:/usr/lib/script.cgi

       ShowIndex = yes|no|<XSLT	file with full path>|xml
	      Return  a	 directory  listing in HTML format for a directory re-
	      quest when the startfile does not	exist. If you want  to	change
	      the index	layout completely, specify the path of a XSLT file. If
	      the  XSLT	file is	not found or 'xml' is used, Hiawatha will out-
	      put the XML of the directory index. An example of	the XML	output
	      can be found in extra/index.xml inside the source	package.
	      Default  =  no	  Example:  ShowIndex	=   /usr/local/etc/hi-
	      awatha/index.xslt

	      (requires	that Hiawatha was not compiled with -DENABLE_XSLT=off)

       SkipCacheCookie = <cookie name>[, <cookie name>,	...]
	      Skip  the	 internal cache	for requests for GGI scripts that con-
	      tain one of the mentioned	cookies.
	      Example: SkipCacheCookie = banshee_login_id

       TLScertFile = <TLS private key and certificate file>
	      Use this option inside a virtualhost block if you	want  to  make
	      use of the SNI capabilities of Hiawatha. See the TLScertFile op-
	      tion in the BINDING CONFIGURATION	chapter	for more information.

       StartFile = <filename>
	      The  file	 which will be send to the browser when	a directory is
	      requested.
	      Default =	index.html     Example:	StartFile = start.php

       TimeForCGI = <time>
	      Maximum time in seconds for a CGI-process	to finish its job.
	      Default =	5     Example: TimeForCGI = 15

       TriggerOnCGIstatus = yes|no
	      Print an HTTP error message or invoke the	 ErrorHandler  when  a
	      CGI outputs a Status HTTP	header line.
	      Default =	no     Example:	TriggerOnCGIstatus = yes

       UseDirectory = <directory_id>[, <directory_id>, ...]
	      The  Directory records to	use for	this virtual host. See chapter
	      DIRECTORY	CONFIGURATION for more information.
	      Example: UseDirectory = my_dir

       UseLocalConfig =	yes|no
	      Tell Hiawatha to use or ignore .hiawatha files.
	      Default =	no     Example:	UseLocalConfig = yes

       UseFastCGI = <fcgi_server_id>[, <fcgi_server_id>, ...]
	      The FastCGI server to use	 for  this  virtual  host.  The	 first
	      FastCGI  server  record that matches (including extension), will
	      be used. See chapter FASTCGI CONFIGURATION for more information.
	      This option sets ExecuteCGI to 'yes' for this host.
	      Example: UseFastCGI = PHP8

       UserWebsites = yes|no
	      Activates	user websites for this	(virtual)  host	 (the  /~user/
	      URL's) (see UserDirectory	for more information).
	      Default =	no     Example:	UserWebsites = yes

       UseToolkit = <toolkit_id>[, <toolkit_id>, ...]
	      Perform  special	operations, like rewriting via regular expres-
	      sions, on	the URL. See chapter URL TOOLKIT for more information.
	      Example: UseToolkit = my_toolkit

	      (requires	 that	Hiawatha   was	 not   compiled	  with	 -DEN-
	      ABLE_TOOLKIT=off)

       UseXSLT = yes|no
	      Activate XSL transformations (see	chapter	XSLT for more informa-
	      tion).
	      Default =	no     Example:	UseXSLT	= yes

	      (requires	that Hiawatha was not compiled with -DENABLE_XSLT=off)

       WebDAVapp = <yes|no>
	      Enables support for WebDAV applications.
	      Default: WebDAVapp = no	  Example: WebDAVapp = yes

       WebsiteRoot = <directory>
	      Root  directory  for  this virtual host. It's not	allowed	to use
	      the root of a disk as the	website	root directory.
	      Example: WebsiteRoot = /home/webmaster/website

       WebSocket = ws[s]://<IP address>:<port> <request	uri>[,...] [connection
       timeout]
	      This setting will	make Hiawatha forward the connection to	a web-
	      socket for every request where  the  URL	starts	with  <request
	      uri>. A wildcard request URI will	forward	every request for this
	      host.  The  connection  timeout is in minutes and	the default is
	      10. See also CAcertificates.
	      Example: WebSocket = ws://127.0.0.1:5000 /chat 30

       WrapCGI = <wrap_id>
	      Specify a	CGI-wrapper id for this	virtual	 host  (see  cgi-wrap-
	      per(1) for more information).
	      Example: WrapCGI = test

DIRECTORY CONFIGURATION
       This  chapter  explains	which options can be set for a specific	direc-
       tory. These options will	override (virtual) host	settings.

       DirectoryId = <directory_id>
	      A	unique ID for a	directory record. Use this Id with the	UseDi-
	      rectory setting in a virtual host.
	      Example: DirectoryId = my_dir

       ExpirePeriod <time> seconds|minutes|hours|days|weeks|months[, pub-
       lic|private]
	      Adds an Expires HTTP header with current timestamp + <time>. The
	      public/private  (default is private) option defines the value of
	      the Cache-Control	header.
	      Example: ExpirePeriod = 2	weeks, public

       Extensions = <extension>[, <extension>, ...]
	      When set,	settings that affect files will	only be	used when  the
	      extension	of the requested file matches with the supplied	list.
	      Example: Extensions = png, jpg, gif

       Path = <path>[, <path>, ...]
	      The path to the subdirectory, which may be virtual (not existing
	      on disk).	This is	a required setting.
	      Example: Path = /files

       RunOnDownload = <path to	program>
	      Run  a  program  when  a client requests a static	resource. This
	      does not include CGI programs. Information about the request  is
	      placed in	environment variables, just like CGI.
	      Example: RunOnDownload = /var/www/log_download

       UploadSpeed = <speed>, <maximum number of connections>
	      Set  the	uploadspeed in kB/s for	all the	files in the directory
	      regardless of the	extension or  mimetype.	 The  uploadspeed  per
	      connection will be divided by the	number of connections.
	      Example: UploadSpeed = 20,4

       AccessList ,
       AlterGroup ,
       AlterList ,
       AlterMode ,
       ExecuteCGI ,
       WrapCGI ,
       FollowSymlinks ,
       PasswordFile ,
       RequiredGroup ,
       Setenv ,
       ShowIndex ,
       StartFile and
       TimeForCGI

FASTCGI	CONFIGURATION
       This chapter explains how to use	one or more FastCGI servers.

       ConnectTo = <ip-address>:<port number>|<path>[, <ip-address>:<port num-
       ber>|<path>, ...]
	      The IP-address and TCP port or UNIX socket Hiawatha must connect
	      to to reach the FastCGI server.
	      Example: ConnectTo = 127.0.0.1:2004 (IPv4)
		       ConnectTo = [::1]:2004 /	::1.2004 (IPv6)
		       ConnectTo = /tmp/hiawatha.sock (UNIX socket)

       Extension = <extension>[, <extension>, ...]
	      The extension of the script the FastCGI server is	able to	inter-
	      pret. If no extension is specified, all requests will be sent to
	      the FastCGI server.
	      Example: Extension = php

       FastCGIid = <fcgi_server_id>
	      Give each	FastCGI	server an unique Id. Use this Id with the Use-
	      FastCGI setting in a virtual host.
	      Example: FastCGIid = PHP8

       ServerRoot = <path>
	      If  the  FastCGI server is running in a chroot, use this setting
	      to specify that chroot directory.
	      Example: ServerRoot = /var/www/chroot

       SessionTimeout =	<time in minutes>
	      The maximum duration of a	CGI session for	this  FastCGI  server.
	      Will only	be used	when specifing multiple	ConnectTo's.
	      Default =	15     Example:	SessionTimeout = 30

URL TOOLKIT
       How  to	use  the  URL toolkit is explained in this chapter. To use URL
       toolkits,  Hiawatha  should  not	 have	been   compiled	  with	 -DEN-
       ABLE_TOOLKIT=off. The main toolkit commands are:

       Do <action>
	      Perform an action, where <action>	can be one of the following:
	      Ban, Call, DenyAccess, Exit, Goto, NotFound, OmitRequestLog, Re-
	      turn, Skip or Use.
	      Example: Do Call other_rule_set

       Header <key> [!]<pattern> <action>
	      Perform  an  action when the HTTP	header <key> matches the POSIX
	      regular expresion	<pattern>, where <action> can be  one  of  the
	      following:
	      Ban, Call, DenyAccess, Exit, Goto, NotFound, OmitRequestLog, Re-
	      turn, Skip or Use.
	      A	negative pattern (leading exclamation mark) can't be used with
	      the  redirect  action.  The  <key>  can  be * to test every HTTP
	      header. Note that	the wildcard means 'any	 header',  not	'every
	      header'.

       Match [!]<pattern> <action>
	      Perform an action	when the URL matches the POSIX regular expres-
	      sion <pattern>, where <action> can be one	of the following:
	      Ban,  Call,  DenyAccess, Exit, Goto, NotFound, Redirect, Return,
	      Rewrite, Skip or UseFastCGI.
	      Use MatchCI to perform case insensitive URL matching. A negative
	      pattern (leading exclamation mark) can't be used with the	 redi-
	      rect and rewrite action.

       Method [!]<request method> <action>
	      Perform  an  action  when	 the  request  method  equals <request
	      method>, where <action> can be one of the	following:
	      Call, DenyAccess,	Exit, Goto, NotFound, Return, Skip or Use
	      Example: Method POST Return

       RequestURI exists|isfile|isdir|notfound <action>
	      Perform an action	based on the presence of the  requested	 file,
	      where <action> can be one	of the following:
	      Call, Return, Exit or Skip.
	      Example: RequestURI isfile Return

       ToolkitId = <toolkit_id>
	      The  toolkit  ID	can be used to bind toolkit rules to a virtual
	      host. See	also UseToolkit.
	      Example: ToolkitId = my_toolkit

       TotalConnections	<value>	<action>
	      Perform an action	if the total amount of connections is equal to
	      or higher	than <value>, where <action> can be one	of the follow-
	      ing:
	      Call, Goto, OmitRequestLog, Redirect or Skip
	      Example: TotalConnections	1000 Call CheckUserAgent

       UseTLS <action>
	      Perform an action	when the client	is connection via  a  TLS  se-
	      cured connection,	where <action> can be one of the following:
	      Call, Exit, Goto,	Return or Skip.

       An exclamation mark in front of a pattern (negative pattern matching)
       makes Hiawatha perform the action when the pattern does not match. The
       <action>	statements mentioned above are described here:

       Ban <seconds>
	      Ban the client for <seconds> seconds.

       Call <toolkit_id>
	      Execute  toolkit record <toolkit_id> and continue	in the current
	      record afterwards.

       DenyAccess
	      Deny access to the requested file	(results in a 403  error)  and
	      terminate	toolkit	processing.

       Exit
	      Terminate	toolkit	processing.

       Goto <toolkit_id>
	      Execute  <toolkit_id>  and  terminate  the current URL rewriting
	      process.

       OmitRequestLog
	      Don't log	the current request in the file	specified  by  Access-
	      Logfile.

       NotFound
	      Fake a 404 Not Found error and terminate toolkit processing.

       Redirect	[301..308] <url>
	      Redirect	the browser to the specified URL and terminate toolkit
	      processing. The default status code is 301.

       Return
	      Return from the current UrlToolkit record.

       Rewrite <replacement> [<max_loop>] [Continue|Return]
	      Rewrite the current URL using <replacement>. Examples:
	      "Match   ^/pics/(.*)    Rewrite	 /images/$1"	will	change
	      "/pics/logo.gif" into "/images/logo.gif".
	      "Match  a	 Rewrite  b  3"	 will  change "/aaaaa.html" into "/bb-
	      baa.html". Default value of <max_loop> is	1, maximum is 20.
	      Rewrite will terminate toolkit processing,  unless  Continue  or
	      Return has been given.

       Skip <number>
	      Skip the next following <number> lines (ToolkitId	excluded).

       Use <url>
	      Replace  the  current  URL with <url> and	terminate toolkit pro-
	      cessing.

       UseFastCGI <fcgi_id>
	      Use FastCGI server with id <fcgi_id> and terminate toolkit  pro-
	      cessing.

       The original URL	is stored in the environment variable REQUEST_URI. Be-
       fore using URL toolkit rules, use the tool 'wigwam' to verify the re-
       sult of your rules (see wigwam(1) for more information).

       Example:
	      VirtualHost {
		   ...
		   UseToolkit =	clean_url
	      }

	      UrlToolkit {
		   ToolkitId = clean_url
		   Match ^/(css|images|js)(/|$)	Return
		   RequestURI exists Return
		   Match ^/.*\?(.*) Rewrite /index.php?$1
		   Match ^/.* Rewrite /index.php
	      }

XSLT
       If a XML	file is	requested, Hiawatha can	do a XSL transformation	when a
       XSLT  sheet  is	present.  For  the  requested  XML  file (<name>.xml),
       '<name>.xslt', 'index.xslt' in the current directory or 'index.xslt' in
       the WebsiteRoot needs to	be present. Otherwise,	the  XML  file	itself
       will  be	uploaded. The environment variables which are available	during
       CGI execution are available as XSLT  parameters.	 URL  variables	 start
       with  'GET_',  POST variables start with	'POST_'	and cookies start with
       'COOKIE_'.

CGI OUTPUT CACHE
       Hiawatha	can cache the output of	CGI applications.  When	 and  for  how
       long  is	determined by the application itself. It can use the following
       CGI headers to control the caching of its output. This feature requires
       that Hiawatha was not compiled with -DENABLE_CACHE=off.

       X-Hiawatha-Cache: <seconds>
	      The output can be	cached	for  <seconds>	seconds.  The  minimum
	      value is 2, the maximum value is 3600 (one hour).
	      Example: X-Hiawatha-Cache: 600

       X-Hiawatha-Cache-Remove:	<url>
	      The  output  of <url> should be removed from the cache. Use this
	      when you update a	cached page in your CMS. Use 'all' as the  URL
	      to clear the cache for the current website.
	      Example: X-Hiawatha-Cache-Remove:	/about

USER SETTINGS PER DIRECTORY
       A  user can override the	settings listed	below for a certain directory.
       This can	be done	by placing one or more of those	 settings  in  a  .hi-
       awatha  file  in	that directory.	Hiawatha will not look for a .hiawatha
       file in the root	directory of the disk.

       AccessList ,
       AlterGroup ,
       AlterList ,
       AlterMode ,
       ErrorHandler ,
       LoginMessage ,
       PasswordFile ,
       RequiredGroup ,
       ShowIndex ,
       StartFile and
       UseToolkit (only	valid in the root directory of a website)

MIMETYPES
       Specify	the  mimetypes	of  files   in	 /usr/local/etc/hiawatha/mime-
       types.conf.

       <mimetype> <extension> [<extension> ...]
	      Example: image/jpeg jpg jpeg jpe

SIGNALS
       TERM   Shutdown the webserver.

       HUP    Close all	open logfiles.

       USR1   Unban all	IP addresses.

       USR2   Clear  the  internal  cache (requires that Hiawatha was not com-
	      piled with -DENABLE_CACHE=off).

FILES
       /usr/local/sbin/hiawatha
       /usr/local/etc/hiawatha/hiawatha.conf
       /usr/local/etc/hiawatha/mime.types
       /usr/local/etc/hiawatha/cgi-wrapper.conf

SEE ALSO
       cgi-wrapper(1), ssi-cgi(1), wigwam(1)

AUTHOR
       Hugo Leisink <hugo@leisink.net> - https://hiawatha.leisink.net/

								   HIAWATHA(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=hiawatha&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help