<p>For example, to make the server accept connections on both
port 80 and port 8000, on all interfaces, use:</p>
- <example>
- Listen 80<br />
- Listen 8000
- </example>
+ <highlight language="config">
+Listen 80
+Listen 8000
+ </highlight>
<p>To make the server accept connections on port 80 for one interface,
and port 8000 on another, use</p>
- <example>
- Listen 192.0.2.1:80<br />
- Listen 192.0.2.5:8000
- </example>
+ <highlight language="config">
+Listen 192.0.2.1:80
+Listen 192.0.2.5:8000
+ </highlight>
<p>IPv6 addresses must be enclosed in square brackets, as in the
following example:</p>
- <example>
+ <highlight language="config">
Listen [2001:db8::a00:20ff:fea7:ccea]:80
- </example>
+ </highlight>
<note type="warning"><p>Overlapping <directive
module="mpm_common">Listen</directive> directives will result in a
<directive module="mpm_common">Listen</directive> directives, as in the
following examples:</p>
- <example>
- Listen 0.0.0.0:80<br />
- Listen 192.0.2.1:80
- </example>
+ <highlight language="config">
+Listen 0.0.0.0:80
+Listen 192.0.2.1:80
+ </highlight>
<p>If your platform supports it and you want httpd to handle IPv4 and
IPv6 connections on separate sockets (i.e., to disable IPv4-mapped
<p>You only need to set the protocol if you are running on non-standard
ports. For example, running an <code>https</code> site on port 8443:</p>
- <example>
+ <highlight language="config">
Listen 192.170.2.1:8443 https
- </example>
+ </highlight>
</section>
<section id="virtualhost">
<p>Typically the module will be configured as so;</p>
- <example>
-CacheRoot /var/cache/apache/<br />
-CacheEnable disk /<br />
-CacheDirLevels 2<br />
+ <highlight language="config">
+CacheRoot "/var/cache/apache/"
+CacheEnable disk /
+CacheDirLevels 2
CacheDirLength 1
- </example>
+ </highlight>
<p>Importantly, as the cached files are locally stored, operating system
in-memory caching will typically be applied to their access also. So
if <directive module="core">AllowOverride</directive> is set to
FileInfo.</p>
- <example>
- ErrorDocument 500 "Sorry, our script crashed. Oh dear"<br />
- ErrorDocument 500 /cgi-bin/crash-recover<br />
- ErrorDocument 500 http://error.example.com/server_error.html<br />
- ErrorDocument 404 /errors/not_found.html <br />
- ErrorDocument 401 /subscription/how_to_subscribe.html
- </example>
+ <highlight language="config">
+ErrorDocument 500 "Sorry, our script crashed. Oh dear"<br />
+ErrorDocument 500 /cgi-bin/crash-recover<br />
+ErrorDocument 500 http://error.example.com/server_error.html<br />
+ErrorDocument 404 /errors/not_found.html <br />
+ErrorDocument 401 /subscription/how_to_subscribe.html
+ </highlight>
<p>The syntax of the <code>ErrorDocument</code> directive is:</p>
- <example>
+ <highlight language="config">
ErrorDocument <3-digit-code> <action>
- </example>
+ </highlight>
<p>where the action will be treated as:</p>
</module> and <module>mod_header</module> allows you to still accept
these headers:</p>
-<example>
-# <br />
-# The following works around a client sending a broken Accept_Encoding<br />
-# header.<br />
-#<br />
-SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1<br />
+<highlight language="config">
+#
+# The following works around a client sending a broken Accept_Encoding
+# header.
+#
+SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1
RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding
-</example>
+</highlight>
</section>
httpd.conf to deal with known client problems. Since the affected clients
are no longer seen in the wild, this configuration is likely no-longer
necessary.</p>
-<example>
-#<br />
-# The following directives modify normal HTTP response behavior.<br />
-# The first directive disables keepalive for Netscape 2.x and browsers that<br />
-# spoof it. There are known problems with these browser implementations.<br />
-# The second directive is for Microsoft Internet Explorer 4.0b2<br />
-# which has a broken HTTP/1.1 implementation and does not properly<br />
-# support keepalive when it is used on 301 or 302 (redirect) responses.<br />
-#<br />
-BrowserMatch "Mozilla/2" nokeepalive<br />
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0<br />
-<br />
-#<br />
-# The following directive disables HTTP/1.1 responses to browsers which<br />
-# are in violation of the HTTP/1.0 spec by not being able to understand a<br />
-# basic 1.1 response.<br />
-#<br />
-BrowserMatch "RealPlayer 4\.0" force-response-1.0<br />
-BrowserMatch "Java/1\.0" force-response-1.0<br />
+<highlight language="config">
+#
+# The following directives modify normal HTTP response behavior.
+# The first directive disables keepalive for Netscape 2.x and browsers that
+# spoof it. There are known problems with these browser implementations.
+# The second directive is for Microsoft Internet Explorer 4.0b2
+# which has a broken HTTP/1.1 implementation and does not properly
+# support keepalive when it is used on 301 or 302 (redirect) responses.
+#
+BrowserMatch "Mozilla/2" nokeepalive
+BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
+
+#
+# The following directive disables HTTP/1.1 responses to browsers which
+# are in violation of the HTTP/1.0 spec by not being able to understand a
+# basic 1.1 response.
+#
+BrowserMatch "RealPlayer 4\.0" force-response-1.0
+BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
-</example>
+</highlight>
</section>
<section id="no-img-log">
particular directories, or to prevent logging of requests
coming from particular hosts.</p>
- <example>
- SetEnvIf Request_URI \.gif image-request<br />
- SetEnvIf Request_URI \.jpg image-request<br />
- SetEnvIf Request_URI \.png image-request<br />
- CustomLog logs/access_log common env=!image-request
- </example>
+ <highlight language="config">
+SetEnvIf Request_URI \.gif image-request
+SetEnvIf Request_URI \.jpg image-request
+SetEnvIf Request_URI \.png image-request
+CustomLog logs/access_log common env=!image-request
+ </highlight>
</section>
<section id="image-theft">
in limited circumstances. We assume that all your images are in
a directory called <code>/web/images</code>.</p>
- <example>
- SetEnvIf Referer "^http://www\.example\.com/" local_referal<br />
- # Allow browsers that do not send Referer info<br />
- SetEnvIf Referer "^$" local_referal<br />
- <Directory /web/images><br />
- <indent>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from env=local_referal
- </indent>
- </Directory>
- </example>
+ <highlight language="config">
+SetEnvIf Referer "^http://www\.example\.com/" local_referal
+# Allow browsers that do not send Referer info
+SetEnvIf Referer "^$" local_referal
+<Directory /web/images>
+ Order Deny,Allow
+ Deny from all
+ Allow from env=local_referal
+</Directory>
+ </highlight>
<p>For more information about this technique, see the
"<a href="http://www.serverwatch.com/tutorials/article.php/1132731"
the <code>html</code> extension to trigger the launch of the
<code>footer.pl</code> CGI script.</p>
- <example>
- Action add-footer /cgi-bin/footer.pl<br/>
- AddHandler add-footer .html
- </example>
+ <highlight language="config">
+Action add-footer /cgi-bin/footer.pl
+AddHandler add-footer .html
+ </highlight>
<p>Then the CGI script is responsible for sending the
originally requested document (pointed to by the
the <code>send-as-is</code> handler, regardless of their
filename extensions.</p>
- <example>
- <Directory /web/htdocs/asis><br/>
- <indent>SetHandler send-as-is<br/></indent>
- </Directory>
- </example>
+ <highlight language="config">
+<Directory /web/htdocs/asis>
+ SetHandler send-as-is
+</Directory>
+ </highlight>
</section>
</section>
you may wish to make use of. Specifically, a new record has
been added to the <code>request_rec</code> structure:</p>
- <example>
+ <highlight language="c">
char *handler
- </example>
+ </highlight>
<p>If you wish to have your module engage a handler, you need
only to set <code>r->handler</code> to the name of the
<p>Do this by specifying the name of the module in your
<directive>LogLevel</directive> directive:</p>
- <example>
+ <highlight language="config">
LogLevel info rewrite:trace5
- </example>
+ </highlight>
<p>This sets the main <directive>LogLevel</directive> to info, but
turns it up to <code>trace5</code> for
<p>A typical configuration for the access log might look as
follows.</p>
- <example>
- LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
- CustomLog logs/access_log common
- </example>
+ <highlight language="config">
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+CustomLog logs/access_log common
+ </highlight>
<p>This defines the <em>nickname</em> <code>common</code> and
associates it with a particular log format string. The format
<p>Another commonly used format string is called the Combined
Log Format. It can be used as follows.</p>
- <example>
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
- \"%{User-agent}i\"" combined<br />
- CustomLog log/access_log combined
- </example>
+ <highlight language="config">
+LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
+CustomLog log/access_log combined
+ </highlight>
<p>This format is exactly the same as the Common Log Format,
with the addition of two more fields. Each of the additional
to mimic the effects of the <code>ReferLog</code> and <code
>AgentLog</code> directives.</p>
- <example>
- LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
- CustomLog logs/access_log common<br />
- CustomLog logs/referer_log "%{Referer}i -> %U"<br />
- CustomLog logs/agent_log "%{User-agent}i"
- </example>
+ <highlight language="config">
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+CustomLog logs/access_log common
+CustomLog logs/referer_log "%{Referer}i -> %U"
+CustomLog logs/agent_log "%{User-agent}i"
+ </highlight>
<p>This example also shows that it is not necessary to define a
nickname with the <directive
include or exclude requests where the environment variable is
set. Some examples:</p>
- <example>
- # Mark requests from the loop-back interface<br />
- SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
- # Mark requests for the robots.txt file<br />
- SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
- # Log what remains<br />
- CustomLog logs/access_log common env=!dontlog
- </example>
+ <highlight language="config">
+# Mark requests from the loop-back interface
+SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
+# Mark requests for the robots.txt file
+SetEnvIf Request_URI "^/robots\.txt$" dontlog
+# Log what remains
+CustomLog logs/access_log common env=!dontlog
+ </highlight>
<p>As another example, consider logging requests from
english-speakers to one log file, and non-english speakers to a
different log file.</p>
- <example>
+ <highlight language="config">
SetEnvIf Accept-Language "en" english<br />
CustomLog logs/english_log common env=english<br />
CustomLog logs/non_english_log common env=!english
- </example>
+ </highlight>
<p>In a caching scenario one would want to know about
the efficiency of the cache. A very simple method to
find this out would be:</p>
- <example>
- SetEnv CACHE_MISS 1<br />
- LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache<br />
- CustomLog logs/access_log common-cache
- </example>
+ <highlight language="config">
+SetEnv CACHE_MISS 1
+LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache
+CustomLog logs/access_log common-cache
+ </highlight>
<p><module>mod_cache</module> will run before
<module>mod_env</module> and when successfull will deliver the
module="mod_log_config">LogFormat</directive> supports logging values
conditional upon the HTTP response code:</p>
- <example>
- LogFormat "%400,501{User-agent}i" browserlog<br />
- LogFormat "%!200,304,302{Referer}i" refererlog
- </example>
+ <highlight language="config">
+LogFormat "%400,501{User-agent}i" browserlog
+LogFormat "%!200,304,302{Referer}i" refererlog
+ </highlight>
<p>In the first example, the <code>User-agent</code> will be
logged if the HTTP status code is 400 or 501. In other cases, a
for this purpose. For example, to rotate the logs every 24 hours, you
can use:</p>
- <example>
- CustomLog "|/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </example>
+ <highlight language="config">
+ CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
+ </highlight>
<p>Notice that quotes are used to enclose the entire command
that will be called for the pipe. Although these examples are
a shell. Use "<code>|$</code>" instead of "<code>|</code>"
to spawn using a shell (usually with <code>/bin/sh -c</code>):</p>
- <example>
- # Invoke "rotatelogs" using a shell<br />
- CustomLog "|$/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </example>
+ <highlight language="config">
+# Invoke "rotatelogs" using a shell
+CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
+ </highlight>
<p>This was the default behaviour for Apache 2.2.
Depending on the shell specifics this might lead to
later split the log into individual files. For example,
consider the following directives.</p>
- <example>
- LogFormat "%v %l %u %t \"%r\" %>s %b"
- comonvhost<br />
- CustomLog logs/access_log comonvhost
- </example>
+ <highlight language="config">
+LogFormat "%v %l %u %t \"%r\" %>s %b" comonvhost
+CustomLog logs/access_log comonvhost
+ </highlight>
<p>The <code>%v</code> is used to log the name of the virtual
host that is serving the request. Then a program like <a
to another site only if the server is started using
<code>httpd -DClosedForNow</code>:</p>
-<example>
-<IfDefine ClosedForNow><br />
-Redirect / http://otherserver.example.com/<br />
+<highlight language="config">
+<IfDefine ClosedForNow>
+ Redirect / http://otherserver.example.com/
</IfDefine>
-</example>
+</highlight>
<p>The <directive type="section" module="core">IfModule</directive>
directive is very similar, except it encloses directives that will
module="mod_mime_magic">MimeMagicFile</directive> directive will be
applied only if <module>mod_mime_magic</module> is available.</p>
-<example>
-<IfModule mod_mime_magic.c><br />
-MimeMagicFile conf/magic<br />
+<highlight language="config">
+<IfModule mod_mime_magic.c>
+ MimeMagicFile conf/magic
</IfModule>
-</example>
+</highlight>
<p>The <directive type="section" module="mod_version">IfVersion</directive>
directive is very similar to <directive type="section"
module is designed for the use in test suites and large networks which have to
deal with different httpd versions and different configurations.</p>
-<example>
- <IfVersion >= 2.1><br />
- <indent>
- # this happens only in versions greater or<br />
- # equal 2.1.0.<br />
- </indent>
+<highlight language="config">
+ <IfVersion >= 2.1>
+ # this happens only in versions greater or
+ # equal 2.1.0.
</IfVersion>
-</example>
+</highlight>
<p><directive type="section" module="core">IfDefine</directive>,
<directive type="section" module="core">IfModule</directive>, and the
following configuration, directory indexes will be enabled for the
<code>/var/web/dir1</code> directory and all subdirectories.</p>
-<example>
-<Directory /var/web/dir1><br />
-Options +Indexes<br />
+<highlight language="config">
+<Directory /var/web/dir1>
+ Options +Indexes
</Directory>
-</example>
+</highlight>
<p>Directives enclosed in a <directive type="section"
module="core">Files</directive> section apply to any file with
deny access to any file named <code>private.html</code> regardless
of where it is found.</p>
-<example>
-<Files private.html><br />
-Order allow,deny<br />
-Deny from all<br />
+<highlight language="config">
+<Files private.html>
+ Order allow,deny
+ Deny from all
</Files>
-</example>
+</highlight>
<p>To address files found in a particular part of the filesystem, the
<directive type="section" module="core">Files</directive> and
of <code>private.html</code> found under the <code>/var/web/dir1/</code>
directory.</p>
-<example>
-<Directory /var/web/dir1><br />
-<Files private.html><br />
-Order allow,deny<br />
-Deny from all<br />
-</Files><br />
+<highlight language="config">
+<Directory /var/web/dir1>
+ <Files private.html>
+ Order allow,deny
+ Deny from all
+ </Files>
</Directory>
-</example>
+</highlight>
</section>
<section id="webspace"><title>Webspace Containers</title>
<code>http://yoursite.example.com/private/dir/file.html</code> as well
as any other requests starting with the <code>/private</code> string.</p>
-<example>
-<LocationMatch ^/private><br />
-Order Allow,Deny<br />
-Deny from all<br />
+<highlight language="config">
+<LocationMatch ^/private>
+ Order Allow,Deny
+ Deny from all
</Location>
-</example>
+</highlight>
<p>The <directive type="section" module="core">Location</directive>
directive need not have anything to do with the filesystem.
No file called <code>server-status</code> needs to exist in the
filesystem.</p>
-<example>
-<Location /server-status><br />
-SetHandler server-status<br />
+<highlight language="config">
+<Location /server-status>
+ SetHandler server-status
</Location>
-</example>
+</highlight>
</section>
<section id="overlapping-webspace"><title>Overlapping Webspace</title>
<p>In order to have two overlapping URLs one has to consider the order in which
certain sections or directives are evaluated. For
<directive type="section" module="core">Location</directive> this would be:</p>
-<example>
-<Location /foo><br />
-</Location><br />
-<Location /foo/bar><br />
+<highlight language="config">
+<Location /foo>
+</Location>
+<Location /foo/bar>
</Location>
-</example>
+</highlight>
<p><directive type="section" module="mod_alias">Alias</directive>es on the other hand,
are mapped vice-versa:</p>
-<example>
-Alias /foo/bar /srv/www/uncommon/bar<br />
-Alias /foo /srv/www/common/foo<br />
-</example>
+<highlight language="config">
+Alias /foo/bar /srv/www/uncommon/bar
+Alias /foo /srv/www/common/foo
+</highlight>
<p>The same is true for the <directive module="mod_proxy">ProxyPass</directive>
directives:</p>
-<example>
-ProxyPass /special-area http://special.example.com smax=5 max=10<br />
+<highlight language="config">
+ProxyPass /special-area http://special.example.com smax=5 max=10
ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover=On
-</example>
+</highlight>
</section>
<section id="wildcards"><title>Wildcards and Regular Expressions</title>
<p>A non-regex wildcard section that changes the configuration of
all user directories could look as follows:</p>
-<example>
-<Directory /home/*/public_html><br />
-Options Indexes<br />
+<highlight language="config">
+<Directory /home/*/public_html>
+ Options Indexes
</Directory>
-</example>
+</highlight>
<p>Using regex sections, we can deny access to many types of image files
at once:</p>
-<example>
-<FilesMatch \.(?i:gif|jpe?g|png)$><br />
-Order allow,deny<br />
-Deny from all<br />
+<highlight language="config">
+<FilesMatch \.(?i:gif|jpe?g|png)$>
+ Order allow,deny
+ Deny from all
</FilesMatch>
-</example>
+</highlight>
</section>
expressed by a boolean expression. For example, the following configuration
denies access if the HTTP Referer header does not start with
"http://www.example.com/".</p>
-<example>
-<If "!(%{HTTP_REFERER} -strmatch 'http://www.example.com/*')"><br />
-Require all denied<br />
+<highlight language="config">
+<If "!(%{HTTP_REFERER} -strmatch 'http://www.example.com/*')">
+ Require all denied
</If>
-</example>
+</highlight>
</section>
location, allowing your restrictions to be circumvented.
For example, consider the following configuration:</p>
-<example>
-<Location /dir/><br />
-Order allow,deny<br />
-Deny from all<br />
+<highlight language="config">
+<Location /dir/>
+ Order allow,deny
+ Deny from all
</Location>
-</example>
+</highlight>
<p>This works fine if the request is for
<code>http://yoursite.example.com/dir/</code>. But what if you are on
will prevent the proxy server from being used to access the
<code>www.example.com</code> website.</p>
-<example>
-<Proxy http://www.example.com/*><br />
-Order allow,deny<br />
-Deny from all<br />
+<highlight language="config">
+<Proxy http://www.example.com/*>
+ Order allow,deny
+ Deny from all
</Proxy>
-</example>
+</highlight>
</section>
<section id="whatwhere"><title>What Directives are Allowed?</title>
this example will be applied in the order A > B > C > D >
E.</p>
-<example>
-<Location /><br />
-E<br />
-</Location><br />
-<br />
-<Files f.html><br />
-D<br />
-</Files><br />
-<br />
-<VirtualHost *><br />
-<Directory /a/b><br />
-B<br />
-</Directory><br />
-</VirtualHost><br />
-<br />
-<DirectoryMatch "^.*b$"><br />
-C<br />
-</DirectoryMatch><br />
-<br />
-<Directory /a/b><br />
-A<br />
-</Directory><br />
-<br />
-</example>
+<highlight language="config">
+<Location />
+ E
+</Location>
+
+<Files f.html>
+ D
+</Files>
+
+<VirtualHost *>
+<Directory /a/b>
+ B
+</Directory>
+</VirtualHost>
+
+<DirectoryMatch "^.*b$">
+ C
+</DirectoryMatch>
+
+<Directory /a/b>
+ A
+</Directory>
+
+</highlight>
<p>For a more concrete example, consider the following. Regardless of
any access restrictions placed in <directive module="core"
evaluated last and will allow unrestricted access to the server. In
other words, order of merging is important, so be careful!</p>
-<example>
-<Location /><br />
-Order deny,allow<br />
-Allow from all<br />
-</Location><br />
-<br />
-# Woops! This <Directory> section will have no effect<br />
-<Directory /><br />
-Order allow,deny<br />
-Allow from all<br />
-Deny from badguy.example.com<br />
+<highlight language="config">
+<Location />
+ Order deny,allow
+ Allow from all
+</Location>
+
+# Woops! This <Directory> section will have no effect
+<Directory />
+ Order allow,deny
+ Allow from all
+ Deny from badguy.example.com
</Directory>
-</example>
+</highlight>
</section>
<p>If for example, your web server is configured to run as:</p>
- <example>
- User www<br />
- Group webgroup<br />
- </example>
+ <highlight language="config">
+User www
+Group webgroup
+ </highlight>
<p>and <program>suexec</program> is installed at
"/usr/local/apache2/bin/suexec", you should run:</p>
<p>In this example, all requests are denied.</p>
<example>
<title>2.2 configuration:</title>
- Order deny,allow<br />
- Deny from all
+ <highlight language="config">
+Order deny,allow
+Deny from all
+ </highlight>
</example>
<example>
<title>2.4 configuration:</title>
+ <highlight language="config">
Require all denied
+ </highlight>
</example>
<p>In this example, all requests are allowed.</p>
<example>
<title>2.2 configuration:</title>
- Order allow,deny<br />
- Allow from all
+ <highlight language="config">
+Order allow,deny
+Allow from all
+ </highlight>
</example>
<example>
<title>2.4 configuration:</title>
+ <highlight language="config">
Require all granted
+ </highlight>
</example>
<p>In the following example, all hosts in the example.org domain
<example>
<title>2.2 configuration:</title>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from example.org
+ <highlight language="config">
+Order Deny,Allow
+Deny from all
+Allow from example.org
+ </highlight>
</example>
<example>
<title>2.4 configuration:</title>
+ <highlight language="config">
Require host example.org
+ </highlight>
</example>
</section>
module="mod_alias">Alias</directive> directive will map any part
of the filesystem into the web space. For example, with</p>
-<example>Alias /docs /var/web</example>
+<highlight language="config">Alias /docs /var/web</highlight>
<p>the URL <code>http://www.example.com/docs/dir/file.html</code>
will be served from <code>/var/web/dir/file.html</code>. The
expression</glossary> based matching and substitution. For
example,</p>
-<example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
- /home/$1/cgi-bin/$2</example>
+ <highlight language="config">
+ ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+) /home/$1/cgi-bin/$2
+ </highlight>
<p>will map a request to
<code>http://example.com/~user/cgi-bin/script.cgi</code> to the
<code>/home/user/public_html/file.html</code>, use the following
<code>AliasMatch</code> directive:</p>
-<example>AliasMatch ^/upages/([a-zA-Z0-9]+)(/(.*))?$
- /home/$1/public_html/$3</example>
+ <highlight language="config">
+ AliasMatch ^/upages/([a-zA-Z0-9]+)(/(.*))?$ /home/$1/public_html/$3
+ </highlight>
</section>
<section id="redirect"><title>URL Redirection</title>
to the new directory <code>/bar/</code>, you can instruct clients
to request the content at the new location as follows:</p>
-<example>Redirect permanent /foo/
- http://www.example.com/bar/</example>
+ <highlight language="config">
+ Redirect permanent /foo/ http://www.example.com/bar/
+ </highlight>
<p>This will redirect any URL-Path starting in
<code>/foo/</code> to the same URL path on the
for the site home page to a different site, but leave all other
requests alone, use the following configuration:</p>
-<example>RedirectMatch permanent ^/$
- http://www.example.com/startpage.html</example>
+ <highlight language="config">
+ RedirectMatch permanent ^/$ http://www.example.com/startpage.html
+ </highlight>
<p>Alternatively, to temporarily redirect all pages on one site
to a particular page on another site, use the following:</p>
-<example>RedirectMatch temp .*
- http://othersite.example.com/startpage.html</example>
+ <highlight language="config">
+ RedirectMatch temp .* http://othersite.example.com/startpage.html
+ </highlight>
</section>
<section id="proxy"><title>Reverse Proxy</title>
and returns them to the client as if they were from the local
server.</p>
-<example>
+<highlight language="config">
ProxyPass /foo/ http://internal.example.com/bar/<br />
ProxyPassReverse /foo/ http://internal.example.com/bar/<br />
ProxyPassReverseCookieDomain internal.example.com public.example.com<br />
ProxyPassReverseCookiePath /foo/ /bar/
-</example>
+</highlight>
<p>The <directive module="mod_proxy">ProxyPass</directive> configures
the server to fetch the appropriate documents, while the
content) in a page as it is being served to the client using
<module>mod_substitute</module>.</p>
-<example>
+<highlight language="config">
Substitute s/internal\.example\.com/www.example.com/i
-</example>
+</highlight>
<p>For more sophisticated rewriting of links in HTML and XHTML, the
<module>mod_proxy_html</module> module is also available. It allows you