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     -&gt; /abc/def/oldstuff.html  (per-server Alias)  /abc/def/oldstuff.html -&gt; /abc/def/newstuff.html  (per-dir    RewriteRule)  /abc/def/newstuff.html -&gt; /xyz/newstuff.html      (per-dir    RewriteBase)  /xyz/newstuff.html     -&gt; /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 &lt;= N &lt;= 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 &lt;= N &lt;= 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 &amp; 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 + -
显示快捷键?