📄 mod_rewrite.html.en
字号:
<strong>Server-Variables</strong>: These are variables of the form <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong> where <em>NAME_OF_VARIABLE</em> can be a string taken from the following list: <table> <tr> <th>HTTP headers:</th> <th>connection & request:</th> <th /> </tr> <tr> <td> HTTP_USER_AGENT<br /> HTTP_REFERER<br /> HTTP_COOKIE<br /> HTTP_FORWARDED<br /> HTTP_HOST<br /> HTTP_PROXY_CONNECTION<br /> HTTP_ACCEPT<br /> </td> <td> REMOTE_ADDR<br /> REMOTE_HOST<br /> REMOTE_PORT<br /> REMOTE_USER<br /> REMOTE_IDENT<br /> REQUEST_METHOD<br /> SCRIPT_FILENAME<br /> PATH_INFO<br /> QUERY_STRING<br /> AUTH_TYPE<br /> </td> <td /> </tr> <tr> <th>server internals:</th> <th>date and time:</th> <th>specials:</th> </tr> <tr> <td> DOCUMENT_ROOT<br /> SERVER_ADMIN<br /> SERVER_NAME<br /> SERVER_ADDR<br /> SERVER_PORT<br /> SERVER_PROTOCOL<br /> SERVER_SOFTWARE<br /> </td> <td> TIME_YEAR<br /> TIME_MON<br /> TIME_DAY<br /> TIME_HOUR<br /> TIME_MIN<br /> TIME_SEC<br /> TIME_WDAY<br /> TIME<br /> </td> <td> API_VERSION<br /> THE_REQUEST<br /> REQUEST_URI<br /> REQUEST_FILENAME<br /> IS_SUBREQ<br /> HTTPS<br /> </td> </tr> </table> <p>These variables all correspond to the similarly named HTTP MIME-headers, C variables of the Apache server or <code>struct tm</code> fields of the Unix system. Most are documented elsewhere in the Manual or in the CGI specification. Those that are special to mod_rewrite include those below.</p> <div class="note"> <dl> <dt><code>IS_SUBREQ</code></dt> <dd>Will contain the text "true" if the request currently being processed is a sub-request, "false" otherwise. Sub-requests may be generated by modules that need to resolve additional files or URIs in order to complete their tasks.</dd> <dt><code>API_VERSION</code></dt> <dd>This is the version of the Apache module API (the internal interface between server and module) in the current httpd build, as defined in include/ap_mmn.h. The module API version corresponds to the version of Apache in use (in the release version of Apache 1.3.14, for instance, it is 19990320:10), but is mainly of interest to module authors.</dd> <dt><code>THE_REQUEST</code></dt> <dd>The full HTTP request line sent by the browser to the server (e.g., "<code>GET /index.html HTTP/1.1</code>"). This does not include any additional headers sent by the browser.</dd> <dt><code>REQUEST_URI</code></dt> <dd>The resource requested in the HTTP request line. (In the example above, this would be "/index.html".)</dd> <dt><code>REQUEST_FILENAME</code></dt> <dd>The full local filesystem path to the file or script matching the request.</dd> <dt><code>HTTPS</code></dt> <dd>Will contain the text "on" if the connection is using SSL/TLS, or "off" otherwise. (This variable can be safely used regardless of whether or not <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is loaded).</dd> </dl></div> </li> </ul> <p>Other things you should be aware of:</p> <ol> <li>The variables SCRIPT_FILENAME and REQUEST_FILENAME contain the same value - the value of the <code>filename</code> field of the internal <code>request_rec</code> structure of the Apache server. The first name is the commonly known CGI variable name while the second is the appropriate counterpart of REQUEST_URI (which contains the value of the <code>uri</code> field of <code>request_rec</code>).</li> <li> <code>%{ENV:variable}</code>, where <em>variable</em> can be any environment variable, is also available. This is looked-up via internal Apache structures and (if not found there) via <code>getenv()</code> from the Apache server process.</li> <li> <code>%{SSL:variable}</code>, where <em>variable</em> is the name of an <a href="mod_ssl.html#envvars">SSL environment variable</a>, can be used whether or not <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is loaded, but will always expand to the empty string if it is not. Example: <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> may expand to <code>128</code>.</li> <li> <code>%{HTTP:header}</code>, where <em>header</em> can be any HTTP MIME-header name, can always be used to obtain the value of a header sent in the HTTP request. Example: <code>%{HTTP:Proxy-Connection}</code> is the value of the HTTP header ``<code>Proxy-Connection:</code>''. <p>If a HTTP header is used in a condition this header is added to the Vary header of the response in case the condition evaluates to to true for the request. It is <strong>not</strong> added if the condition evaluates to false for the request. Adding the HTTP header to the Vary header of the response is needed for proper caching.</p> <p>It has to be kept in mind that conditions follow a short circuit logic in the case of the '<strong><code>ornext|OR</code></strong>' flag so that certain conditions might not be evaluated at all.</p></li> <li> <code>%{LA-U:variable}</code> can be used for look-aheads which perform an internal (URL-based) sub-request to determine the final value of <em>variable</em>. This can be used to access variable for rewriting which is not available at the current stage, but will be set in a later phase. <p>For instance, to rewrite according to the <code>REMOTE_USER</code> variable from within the per-server context (<code>httpd.conf</code> file) you must use <code>%{LA-U:REMOTE_USER}</code> - this variable is set by the authorization phases, which come <em>after</em> the URL translation phase (during which mod_rewrite operates).</p> <p>On the other hand, because mod_rewrite implements its per-directory context (<code>.htaccess</code> file) via the Fixup phase of the API and because the authorization phases come <em>before</em> this phase, you just can use <code>%{REMOTE_USER}</code> in that context.</p></li> <li> <code>%{LA-F:variable}</code> can be used to perform an internal (filename-based) sub-request, to determine the final value of <em>variable</em>. Most of the time, this is the same as LA-U above.</li> </ol> <p><em>CondPattern</em> is the condition pattern, a regular expression which is applied to the current instance of the <em>TestString</em>. <em>TestString</em> is first evaluated, before being matched against <em>CondPattern</em>.</p> <p><strong>Remember:</strong> <em>CondPattern</em> is a <em>perl compatible regular expression</em> with some additions:</p> <ol> <li>You can prefix the pattern string with a '<code>!</code>' character (exclamation mark) to specify a <strong>non</strong>-matching pattern.</li> <li> There are some special variants of <em>CondPatterns</em>. Instead of real regular expression strings you can also use one of the following: <ul> <li>'<strong><CondPattern</strong>' (lexicographically precedes)<br /> Treats the <em>CondPattern</em> as a plain string and compares it lexicographically to <em>TestString</em>. True if <em>TestString</em> lexicographically precedes <em>CondPattern</em>.</li> <li>'<strong>>CondPattern</strong>' (lexicographically follows)<br /> Treats the <em>CondPattern</em> as a plain string and compares it lexicographically to <em>TestString</em>. True if <em>TestString</em> lexicographically follows <em>CondPattern</em>.</li> <li>'<strong>=CondPattern</strong>' (lexicographically equal)<br /> Treats the <em>CondPattern</em> as a plain string and compares it lexicographically to <em>TestString</em>. True if <em>TestString</em> is lexicographically equal to <em>CondPattern</em> (the two strings are exactly equal, character for character). If <em>CondPattern</em> is <code>""</code> (two quotation marks) this compares <em>TestString</em> to the empty string.</li> <li>'<strong>-d</strong>' (is <strong>d</strong>irectory)<br /> Treats the <em>TestString</em> as a pathname and tests whether or not it exists, and is a directory.</li> <li>'<strong>-f</strong>' (is regular <strong>f</strong>ile)<br /> Treats the <em>TestString</em> as a pathname and tests whether or not it exists, and is a regular file.</li> <li>'<strong>-s</strong>' (is regular file, with <strong>s</strong>ize)<br /> Treats the <em>TestString</em> as a pathname and tests whether or not it exists, and is a regular file with size greater than zero.</li> <li>'<strong>-l</strong>' (is symbolic <strong>l</strong>ink)<br /> Treats the <em>TestString</em> as a pathname and tests whether or not it exists, and is a symbolic link.</li> <li>'<strong>-x</strong>' (has e<strong>x</strong>ecutable
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -