mirror of
https://github.com/apache/httpd.git
synced 2025-11-09 15:21:02 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1436574 13f79535-47bb-0310-9956-ffa450edef68
237 lines
7.6 KiB
XML
237 lines
7.6 KiB
XML
<?xml version="1.0"?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
|
|
<!-- $LastChangedRevision$ -->
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<modulesynopsis metafile="mod_macro.xml.meta">
|
|
|
|
<name>mod_macro</name>
|
|
<description>Provides macros within apache httpd runtime configuration files</description>
|
|
<status>Base</status>
|
|
<sourcefile>mod_macro.c</sourcefile>
|
|
<identifier>macro_module</identifier>
|
|
|
|
<summary>
|
|
|
|
<p>This modules 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.</p>
|
|
</summary>
|
|
|
|
<section id="features"><title>Features</title>
|
|
|
|
<p>Definition of a macro:</p>
|
|
|
|
<ul>
|
|
<li> macro definition within a <directive type="section">Macro</directive> section, following
|
|
the httpd configuration style.</li>
|
|
<li> user defined names for the macro and its parameters.</li>
|
|
<li> macro names are case-insensitive, like httpd directives.</li>
|
|
<li> macro parameter names are case sensitive.</li>
|
|
<li> macro parameters must have distinct names.</li>
|
|
<li> error on empty parameter names.</li>
|
|
<li> redefining a macro generates a warning.</li>
|
|
<li> macro definitions can be nested... (but what for?)</li>
|
|
<li> warn about unused macro parameters.</li>
|
|
<li> warn about macro parameter names which prefix one another.</li>
|
|
<li> warn if a parameter is not prefixed by any of '<code>$%@</code>'
|
|
(good practice).</li>
|
|
<li> the available prefixes help deal with interactions with other
|
|
directives such as <directive module="core">Define</directive>.</li>
|
|
<li> tip: it may be useful to define a macro parameter with surrounding
|
|
braces, say <code>${foo}</code> so that the name can appear with
|
|
surrounding characters such as <code>bla${foo}bla</code>.</li>
|
|
<li> warn about empty macro contents.</li>
|
|
<li> warns if sections are not properly nested within a macro.
|
|
(if it is detected so).</li>
|
|
<li> the lexical scope of macro parameters is restricted to the macro text,
|
|
it is not forwarded to includes for instance.</li>
|
|
<li> arbitrary contents in macros.
|
|
<p>It means you can put perl sections or whatever you like in a macro.
|
|
No assumption is made about the lexical structure (quotes, spaces or
|
|
whatever) within the macro contents but to expect a set of
|
|
backslash-continued independent lines.</p></li>
|
|
</ul>
|
|
|
|
<p>Use of a macro:</p>
|
|
|
|
<ul>
|
|
<li> number of arguments must match the definition.</li>
|
|
<li> all occurences of macro parameters are substituted by their values.</li>
|
|
<li> in case of conflicts, the longest parameter name is chosen.</li>
|
|
<li> macro expansion recursion is detected and stopped (error).</li>
|
|
<li> warn about empty arguments when used.</li>
|
|
<li> on errors, try to describe precisely where the error occured.</li>
|
|
<li> <code>$</code> and <code>%</code>-prefixed parameters are not
|
|
escaped.</li>
|
|
<li> <code>@</code>-prefixed parameters are escaped in quotes.</li>
|
|
</ul>
|
|
|
|
<p>Removal of a macro definition:</p>
|
|
|
|
<ul>
|
|
<li> the macro must be already defined.</li>
|
|
</ul>
|
|
|
|
<highlight language="config">
|
|
<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
|
|
</highlight>
|
|
|
|
</section>
|
|
|
|
<section id="examples"><title>Examples</title>
|
|
|
|
<p>A common usage of <module>mod_macro</module> is for the creation of
|
|
dynamically-generated virtual hosts.</p>
|
|
|
|
<highlight language="config">
|
|
## Define a VHost Macro for repetitive configurations
|
|
|
|
<Macro VHost $host $port $dir>
|
|
Listen $port
|
|
<VirtualHost *:$port>
|
|
|
|
ServerName $host
|
|
DocumentRoot $dir
|
|
|
|
<Directory $dir>
|
|
# do something here...
|
|
</Directory>
|
|
|
|
# limit access to intranet subdir.
|
|
<Directory $dir/intranet>
|
|
Require ip 10.0.0.0/8
|
|
</Directory>
|
|
</VirtualHost>
|
|
</Macro>
|
|
|
|
## Use of VHost with different arguments.
|
|
|
|
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
|
|
</highlight>
|
|
|
|
</section>
|
|
|
|
<!-- Macro -->
|
|
<directivesynopsis type="section">
|
|
<name>Macro</name>
|
|
<description>Define a configuration file macro</description>
|
|
<syntax>
|
|
<Macro <var>name</var> [<var>par1</var> .. <var>parN</var>]>
|
|
... </Macro></syntax>
|
|
<contextlist>
|
|
<context>server config</context>
|
|
<context>virtual host</context>
|
|
<context>directory</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>The <directive>Macro</directive> directive controls the definition of
|
|
a macro within the server runtime configuration files.
|
|
The first argument is the name of the macro.
|
|
Other arguments are parameters to the macro. It is good practice to prefix
|
|
parameter names with any of '<code>$%@</code>', and not macro names
|
|
with such characters.
|
|
</p>
|
|
|
|
<highlight language="config">
|
|
<Macro LocalAccessPolicy>
|
|
Require ip 10.2.16.0/24
|
|
</Macro>
|
|
|
|
<Macro RestrictedAccessPolicy $ipnumbers>
|
|
Require ip $ipnumbers
|
|
</Macro>
|
|
</highlight>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<!-- Use -->
|
|
<directivesynopsis>
|
|
<name>Use</name>
|
|
<description>Use a macro</description>
|
|
<syntax>Use <var>name</var> [<var>value1</var> ... <var>valueN</var>]
|
|
</syntax>
|
|
<contextlist>
|
|
<context>server config</context>
|
|
<context>virtual host</context>
|
|
<context>directory</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>The <directive>Use</directive> directive controls the use of a macro.
|
|
The specified macro is expanded. It must be given the same number of
|
|
arguments than in the macro definition. The provided values are
|
|
associated to their corresponding initial parameters and are substituted
|
|
before processing.</p>
|
|
|
|
<highlight language="config">
|
|
Use LocalAccessPolicy
|
|
...
|
|
Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"
|
|
</highlight>
|
|
|
|
<p>is equivalent, with the macros defined above, to:</p>
|
|
|
|
<highlight language="config">
|
|
Require ip 10.2.16.0/24
|
|
...
|
|
Require ip 192.54.172.0/24 192.54.148.0/24
|
|
</highlight>
|
|
</usage>
|
|
|
|
</directivesynopsis>
|
|
|
|
<!-- UndefMacro -->
|
|
<directivesynopsis>
|
|
<name>UndefMacro</name>
|
|
<description>Undefine a macro</description>
|
|
|
|
<syntax>UndefMacro <var>name</var></syntax>
|
|
<contextlist>
|
|
<context>server config</context>
|
|
<context>virtual host</context>
|
|
<context>directory</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>The <directive>UndefMacro</directive> directive undefines a macro
|
|
which has been defined before hand.</p>
|
|
|
|
<highlight language="config">
|
|
UndefMacro LocalAccessPolicy
|
|
UndefMacro RestrictedAccessPolicy
|
|
</highlight>
|
|
</usage>
|
|
</directivesynopsis>
|
|
</modulesynopsis>
|