mod_rewrite.html.en
来自「apache的软件linux版本」· EN 代码 · 共 1,362 行 · 第 1/5 页
EN
1,362 行
the internal processing steps:</p><pre>Request: /xyz/oldstuff.htmlInternal Processing: /xyz/oldstuff.html -> /abc/def/oldstuff.html (per-server Alias) /abc/def/oldstuff.html -> /abc/def/newstuff.html (per-dir RewriteRule) /abc/def/newstuff.html -> /xyz/newstuff.html (per-dir RewriteBase) /xyz/newstuff.html -> /abc/def/newstuff.html (per-server Alias)Result: /abc/def/newstuff.html</pre> <p>This seems very complicated, but is in fact correct Apache internal processing. Because the per-directory rewriting comes late in the process, the rewritten request has to be re-injected into the Apache kernel. This is not the serious overhead it may seem to be - this re-injection is completely internal to the Apache server (and the same procedure is used by many other operations within Apache).</p> </div></div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="directive-section"><h2><a name="RewriteCond" id="RewriteCond">RewriteCond</a> <a name="rewritecond" id="rewritecond">Directive</a></h2><table class="directive"><tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines a condition under which rewriting will take place</td></tr><tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code> RewriteCond <em>TestString</em> <em>CondPattern</em></code></td></tr><tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr><tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr><tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr><tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr></table> <p>The <code class="directive">RewriteCond</code> directive defines a rule condition. One or more <code class="directive">RewriteCond</code> can precede a <code class="directive"><a href="#rewriterule">RewriteRule</a></code> directive. The following rule is then only used if both the current state of the URI matches its pattern, <strong>and</strong> if these conditions are met.</p> <p><em>TestString</em> is a string which can contain the following expanded constructs in addition to plain text:</p> <ul> <li> <strong>RewriteRule backreferences</strong>: These are backreferences of the form <strong><code>$N</code></strong> (0 <= N <= 9), which provide access to the grouped parts (in parentheses) of the pattern, from the <code>RewriteRule</code> which is subject to the current set of <code>RewriteCond</code> conditions.. </li> <li> <strong>RewriteCond backreferences</strong>: These are backreferences of the form <strong><code>%N</code></strong> (1 <= N <= 9), which provide access to the grouped parts (again, in parentheses) of the pattern, from the last matched <code>RewriteCond</code> in the current set of conditions. </li> <li> <strong>RewriteMap expansions</strong>: These are expansions of the form <strong><code>${mapname:key|default}</code></strong>. See <a href="#mapfunc">the documentation for RewriteMap</a> for more details. </li> <li> <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>system stuff:</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>''.</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>.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?