From: Rich Bowen
Date: Sun, 22 Sep 2013 20:11:05 +0000 (+0000)
Subject: Restructure the mod_macro doc a little, with a 'usage', 'details', and
X-Git-Tag: 2.5.0-alpha~5033
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7ac53759a1b028316c7787f256be2e57b711393b;p=apache
Restructure the mod_macro doc a little, with a 'usage', 'details', and
'examples' section. More examples to come.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1525426 13f79535-47bb-0310-9956-ffa450edef68
---
diff --git a/docs/manual/mod/mod_macro.xml b/docs/manual/mod/mod_macro.xml
index 11e0b4d5c0..337870c057 100644
--- a/docs/manual/mod/mod_macro.xml
+++ b/docs/manual/mod/mod_macro.xml
@@ -30,83 +30,101 @@
- This module provides macros within apache httpd runtime configuration files.
- These macros may have parameters. They are expanded when used (parameters are
- substituted by their values given as an argument), and the result is
- processed normally.
+ Provides macros within Apache httpd runtime configuration files,
+ to ease the process of creating numerous similar configuration
+ blocks. When the server starts up, the macros are expanded using the
+ provided parameters, and the result is processed as along with the
+ rest of the configuration file.
+
-Features
-
-Definition of a macro:
-
-
-
-Use of a macro:
-
-
- - number of arguments must match the definition.
- - all occurences of macro parameters are substituted by their values.
- - in case of conflicts, the longest parameter name is chosen.
- - macro expansion recursion is detected and stopped (error).
- - warn about empty arguments when used.
- - on errors, try to describe precisely where the error occured.
- -
$
and %
-prefixed parameters are not
- escaped.
- -
@
-prefixed parameters are escaped in quotes.
-
-
-Removal of a macro definition:
+Usage
-
- - the macro must be already defined.
-
+Macros are defined using Macro blocks, which contain the portion of
+your configuration that needs to be repeated, complete with variables
+for those parts that will need to be substituted.
+
+For example, you might use a macro to define a VirtualHost block, in order to define
+multiple similar virtual hosts:
-<Macro DirGroup $dir $group>
- <Directory $dir>
- require group $group
- </Directory>
+<Macro VHost $name $domain>
+<VirtualHost *:80>
+ ServerName $domain
+ ServerAlias www.$domain
+
+ DocumentRoot /var/www/vhosts/$name
+ ErrorLog /var/log/httpd/$name.error_log
+ CustomLog /var/log/httpd/name.access_log combined
+>/VirtualHost>
</Macro>
+
-Use DirGroup /www/apache/private private
-Use DirGroup /www/apache/server admin
+Macro names are case-insensitive, like httpd configuration
+directives. However, variable names are case sensitive.
-UndefMacro DirGroup
+You would then invoke this macro several times to create virtual
+hosts:
+
+
+Use VHost example example.com
+Use VHost myhost hostname.org
+Use VHost apache apache.org
+
+UndefMacro VHost
+
+
+At server startup time, each of these Use
+invocations would be expanded into a full virtualhost, as
+described by the Macro definition.
+
+The UndefMacro directive is used so that later
+macros using the same variable names don't result in conflicting
+definitions.
+
+A more elaborate version of this example may be seen below in the
+Examples section.
+
+
+
+Technical details
+
+Parameter names should begin with a sigil such as $
,
+%
, or @
, so that they are clearly
+identifiable, and also in order to help deail with interactions with
+other directives, such as the core Define directive. Failure to do so will
+result in a warning. Nevertheless, you are encouraged to have a good
+knowledge of your entire server configuration in order to avoid reusing
+the same variables in different scopes, which can cause confusion.
+
+Parameters prefixed with either $
or %
are
+not escaped. Parameters prefixes with @
are escaped in
+quotes.
+
+Avoid using a parameter which contains another parameter as a prefix,
+(For example, $win
and $winter
) as this may
+cause confusion at expression evaluation time. In the event of such
+confusion, the longest possible parameter name is used.
+
+If you want to use a value within another string, it is useful to
+surround the parameter in braces, to avoid confusion:
+
+
+<Macro DocRoot ${docroot}>
+ DocumentRoot /var/www/${docroot}/htdocs
+</Macro>
-Examples
+
+Examples
+
+
+Virtual Host Definition
A common usage of mod_macro is for the creation of
dynamically-generated virtual hosts.
@@ -121,8 +139,9 @@ dynamically-generated virtual hosts.
ServerName $host
DocumentRoot $dir
+ # Public document root
<Directory $dir>
- # do something here...
+ Require all granted
</Directory>
# limit access to intranet subdir.
@@ -138,8 +157,31 @@ Use VHost www.apache.org 80 /vhosts/apache/htdocs
Use VHost example.org 8080 /vhosts/example/htdocs
Use VHost www.example.fr 1234 /vhosts/example.fr/htdocs
+
-
+
+Removal of a macro definition
+
+
+ - the macro must be already defined.
+
+
+
+<Macro DirGroup $dir $group>
+ <Directory $dir>
+ Require group $group
+ </Directory>
+</Macro>
+
+Use DirGroup /www/apache/private private
+Use DirGroup /www/apache/server admin
+
+UndefMacro DirGroup
+
+
+
+
+
@@ -233,4 +275,5 @@ UndefMacro RestrictedAccessPolicy
+