]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_macro.html.en
Documentation rebuild after recent commits
[apache] / docs / manual / mod / mod_macro.html.en
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
4 <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
5 <!--
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7               This file is generated from xml source: DO NOT EDIT
8         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
9       -->
10 <title>mod_macro - Apache HTTP Server Version 2.5</title>
11 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
12 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
13 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
14 <script src="../style/scripts/prettify.min.js" type="text/javascript">
15 </script>
16
17 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
18 <body>
19 <div id="page-header">
20 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
21 <p class="apache">Apache HTTP Server Version 2.5</p>
22 <img alt="" src="../images/feather.png" /></div>
23 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
24 <div id="path">
25 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
26 <div id="page-content">
27 <div id="preamble"><h1>Apache Module mod_macro</h1>
28 <div class="toplang">
29 <p><span>Available Languages: </span><a href="../en/mod/mod_macro.html" title="English">&nbsp;en&nbsp;</a> |
30 <a href="../fr/mod/mod_macro.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a></p>
31 </div>
32 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides macros within apache httpd runtime configuration files</td></tr>
33 <tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
34 <tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>macro_module</td></tr>
35 <tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_macro.c</td></tr></table>
36 <h3>Summary</h3>
37
38
39     <p>Provides macros within Apache httpd runtime configuration files,
40     to ease the process of creating numerous similar configuration
41     blocks. When the server starts up, the macros are expanded using the
42     provided parameters, and the result is processed as along with the
43     rest of the configuration file.</p>
44
45 </div>
46 <div id="quickview"><h3>Topics</h3>
47 <ul id="topics">
48 <li><img alt="" src="../images/down.gif" /> <a href="#usage">Usage</a></li>
49 <li><img alt="" src="../images/down.gif" /> <a href="#tips">Tips</a></li>
50 <li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
51 </ul><h3 class="directives">Directives</h3>
52 <ul id="toc">
53 <li><img alt="" src="../images/down.gif" /> <a href="#macro">&lt;Macro&gt;</a></li>
54 <li><img alt="" src="../images/down.gif" /> <a href="#undefmacro">UndefMacro</a></li>
55 <li><img alt="" src="../images/down.gif" /> <a href="#use">Use</a></li>
56 </ul>
57 <h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_macro">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_macro">Report a bug</a></li></ul><h3>See also</h3>
58 <ul class="seealso">
59 <li><a href="#comments_section">Comments</a></li></ul></div>
60 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
61 <div class="section">
62 <h2><a name="usage" id="usage">Usage</a></h2>
63
64 <p>Macros are defined using <code class="directive"><a href="#macro">&lt;Macro&gt;</a></code> blocks, which contain the portion of
65 your configuration that needs to be repeated, complete with variables
66 for those parts that will need to be substituted.</p>
67
68 <p>For example, you might use a macro to define a <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> block, in order to define
69 multiple similar virtual hosts:</p>
70
71 <pre class="prettyprint lang-config">&lt;Macro VHost $name $domain&gt;
72 &lt;VirtualHost *:80&gt;
73     ServerName $domain
74     ServerAlias www.$domain
75
76     DocumentRoot "/var/www/vhosts/$name"
77     ErrorLog "/var/log/httpd/$name.error_log"
78     CustomLog "/var/log/httpd/$name.access_log" combined
79 &lt;/VirtualHost&gt;
80 &lt;/Macro&gt;</pre>
81
82
83 <p>Macro names are case-insensitive, like httpd configuration
84 directives. However, variable names are case sensitive.</p>
85
86 <p>You would then invoke this macro several times to create virtual
87 hosts:</p>
88
89 <pre class="prettyprint lang-config">Use VHost example example.com
90 Use VHost myhost hostname.org
91 Use VHost apache apache.org
92
93 UndefMacro VHost</pre>
94
95
96 <p>At server startup time, each of these <code class="directive"><a href="#use">Use</a></code>
97 invocations would be expanded into a full virtualhost, as
98 described by the <code class="directive"><a href="#macro">&lt;Macro&gt;</a></code>
99 definition.</p>
100
101 <p>The <code class="directive"><a href="#undefmacro">UndefMacro</a></code> directive is
102 used so that later macros using the same variable names don't result in
103 conflicting definitions.</p>
104
105 <p>A more elaborate version of this example may be seen below in the
106 Examples section.</p>
107
108 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
109 <div class="section">
110 <h2><a name="tips" id="tips">Tips</a></h2>
111
112 <p>Parameter names should begin with a sigil such as <code>$</code>,
113 <code>%</code>, or <code>@</code>, so that they are clearly
114 identifiable, and also in order to help deal with interactions with
115 other directives, such as the core <code class="directive"><a href="../mod/core.html#define">Define</a></code> directive. Failure to do so will
116 result in a warning. Nevertheless, you are encouraged to have a good
117 knowledge of your entire server configuration in order to avoid reusing
118 the same variables in different scopes, which can cause confusion.</p>
119
120 <p>Parameters prefixed with either <code>$</code> or <code>%</code> are
121 not escaped. Parameters prefixes with <code>@</code> are escaped in
122 quotes.</p>
123
124 <p>Avoid using a parameter which contains another parameter as a prefix,
125 (For example, <code>$win</code> and <code>$winter</code>) as this may
126 cause confusion at expression evaluation time. In the event of such
127 confusion, the longest possible parameter name is used.</p>
128
129 <p>If you want to use a value within another string, it is useful to
130 surround the parameter in braces, to avoid confusion:</p>
131
132 <pre class="prettyprint lang-config">&lt;Macro DocRoot ${docroot}&gt;
133     DocumentRoot "/var/www/${docroot}/htdocs"
134 &lt;/Macro&gt;</pre>
135
136
137 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
138 <div class="section">
139 <h2><a name="examples" id="examples">Examples</a></h2>
140
141
142 <h3>Virtual Host Definition</h3>
143
144
145 <p>A common usage of <code class="module"><a href="../mod/mod_macro.html">mod_macro</a></code> is for the creation of
146 dynamically-generated virtual hosts.</p>
147
148 <pre class="prettyprint lang-config">## Define a VHost Macro for repetitive configurations
149
150 &lt;Macro VHost $host $port $dir&gt;
151   Listen $port
152   &lt;VirtualHost *:$port&gt;
153
154     ServerName $host
155     DocumentRoot "$dir"
156
157     # Public document root
158     &lt;Directory "$dir"&gt;
159         Require all granted
160     &lt;/Directory&gt;
161
162     # limit access to intranet subdir.
163     &lt;Directory "$dir/intranet"&gt;
164       Require ip 10.0.0.0/8
165     &lt;/Directory&gt;
166   &lt;/VirtualHost&gt;
167 &lt;/Macro&gt;
168
169 ## Use of VHost with different arguments.
170
171 Use VHost www.apache.org 80 /vhosts/apache/htdocs
172 Use VHost example.org 8080 /vhosts/example/htdocs
173 Use VHost www.example.fr 1234 /vhosts/example.fr/htdocs</pre>
174
175  
176
177 <h3>Removal of a macro definition</h3>
178
179
180 <p>It's recommended that you undefine a macro once you've used it. This
181 avoids confusion in a complex configuration file where there may be
182 conflicts in variable names.</p>
183
184 <pre class="prettyprint lang-config">&lt;Macro DirGroup $dir $group&gt;
185   &lt;Directory "$dir"&gt;
186     Require group $group
187   &lt;/Directory&gt;
188 &lt;/Macro&gt;
189
190 Use DirGroup /www/apache/private private
191 Use DirGroup /www/apache/server  admin
192
193 UndefMacro DirGroup</pre>
194
195
196  
197
198 </div>
199 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
200 <div class="directive-section"><h2><a name="Macro" id="Macro">&lt;Macro&gt;</a> <a name="macro" id="macro">Directive</a></h2>
201 <table class="directive">
202 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define a configuration file macro</td></tr>
203 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>
204 &lt;Macro <var>name</var> [<var>par1</var> .. <var>parN</var>]&gt;
205 ... &lt;/Macro&gt;</code></td></tr>
206 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
207 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
208 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
209 </table>
210     <p>The <code class="directive">&lt;Macro&gt;</code> directive controls the
211     definition of a macro within the server runtime configuration files.
212     The first argument is the name of the macro.
213     Other arguments are parameters to the macro. It is good practice to prefix
214     parameter names with any of '<code>$%@</code>', and not macro names
215     with such characters.
216     </p>
217
218     <pre class="prettyprint lang-config">&lt;Macro LocalAccessPolicy&gt;
219     Require ip 10.2.16.0/24
220 &lt;/Macro&gt;
221
222 &lt;Macro RestrictedAccessPolicy $ipnumbers&gt;
223     Require ip $ipnumbers
224 &lt;/Macro&gt;</pre>
225
226
227 </div>
228 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
229 <div class="directive-section"><h2><a name="UndefMacro" id="UndefMacro">UndefMacro</a> <a name="undefmacro" id="undefmacro">Directive</a></h2>
230 <table class="directive">
231 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Undefine a macro</td></tr>
232 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>UndefMacro <var>name</var></code></td></tr>
233 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
234 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
235 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
236 </table>
237     <p>The <code class="directive">UndefMacro</code> directive undefines a macro
238     which has been defined before hand.</p>
239
240     <pre class="prettyprint lang-config">UndefMacro LocalAccessPolicy
241 UndefMacro RestrictedAccessPolicy</pre>
242
243
244 </div>
245 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
246 <div class="directive-section"><h2><a name="Use" id="Use">Use</a> <a name="use" id="use">Directive</a></h2>
247 <table class="directive">
248 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use a macro</td></tr>
249 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Use <var>name</var> [<var>value1</var> ... <var>valueN</var>]
250 </code></td></tr>
251 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
252 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
253 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_macro</td></tr>
254 </table>
255     <p>The <code class="directive">Use</code> directive controls the use of a macro.
256     The specified macro is expanded. It must be given the same number of
257     arguments as in the  macro definition. The provided values are
258     associated to their corresponding initial parameters and are substituted
259     before processing.</p>
260
261     <pre class="prettyprint lang-config">Use LocalAccessPolicy
262 ...
263 Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"</pre>
264
265
266     <p>is equivalent, with the macros defined above, to:</p>
267
268     <pre class="prettyprint lang-config">Require ip 10.2.16.0/24
269 ...
270 Require ip 192.54.172.0/24 192.54.148.0/24</pre>
271
272
273 </div>
274 </div>
275 <div class="bottomlang">
276 <p><span>Available Languages: </span><a href="../en/mod/mod_macro.html" title="English">&nbsp;en&nbsp;</a> |
277 <a href="../fr/mod/mod_macro.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a></p>
278 </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
279 <script type="text/javascript"><!--//--><![CDATA[//><!--
280 var comments_shortname = 'httpd';
281 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_macro.html';
282 (function(w, d) {
283     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
284         d.write('<div id="comments_thread"><\/div>');
285         var s = d.createElement('script');
286         s.type = 'text/javascript';
287         s.async = true;
288         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
289         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
290     }
291     else {
292         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
293     }
294 })(window, document);
295 //--><!]]></script></div><div id="footer">
296 <p class="apache">Copyright 2016 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
297 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
298 if (typeof(prettyPrint) !== 'undefined') {
299     prettyPrint();
300 }
301 //--><!]]></script>
302 </body></html>