⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rewrite_guide.html.en

📁 apache的软件linux版本
💻 EN
📖 第 1 页 / 共 2 页
字号:
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX              This file is generated from xml source: DO NOT EDIT        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      --><title>URL Rewriting Guide - Apache HTTP Server</title><link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /><link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /><link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link href="../images/favicon.ico" rel="shortcut icon" /></head><body id="manual-page"><div id="page-header"><p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p><p class="apache">Apache HTTP Server Version 2.0</p><img alt="" src="../images/feather.gif" /></div><div class="up"><a href="./index.html"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div><div id="path"><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.0</a></div><div id="page-content"><div id="preamble"><h1>URL Rewriting Guide</h1><div class="toplang"><p><span>Available Languages: </span><a href="../en/rewrite/rewrite_guide.html" title="English">&nbsp;en&nbsp;</a></p></div>    <p>This document supplements the <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>    <a href="../mod/mod_rewrite.html">reference documentation</a>.    It describes how one can use Apache's <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>    to solve typical URL-based problems with which webmasters are    commonony confronted. We give detailed descriptions on how to    solve each problem by configuring URL rewriting rulesets.</p>    <div class="warning">ATTENTION: Depending on your server configuration    it may be necessary to slightly change the examples for your    situation, e.g. adding the <code>[PT]</code> flag when    additionally using <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> and    <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>, etc. Or rewriting a ruleset    to fit in <code>.htaccess</code> context instead    of per-server context. Always try to understand what a    particular ruleset really does before you use it. This    avoids many problems.</div>  </div><div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#canonicalurl">Canonical URLs</a></li><li><img alt="" src="../images/down.gif" /> <a href="#canonicalhost">Canonical Hostnames</a></li><li><img alt="" src="../images/down.gif" /> <a href="#moveddocroot">Moved <code>DocumentRoot</code></a></li><li><img alt="" src="../images/down.gif" /> <a href="#trailingslash">Trailing Slash Problem</a></li><li><img alt="" src="../images/down.gif" /> <a href="#movehomedirs">Move Homedirs to Different Webserver</a></li><li><img alt="" src="../images/down.gif" /> <a href="#multipledirs">Search pages in more than one directory</a></li><li><img alt="" src="../images/down.gif" /> <a href="#setenvvars">Set Environment Variables According To URL Parts</a></li><li><img alt="" src="../images/down.gif" /> <a href="#uservhosts">Virtual User Hosts</a></li><li><img alt="" src="../images/down.gif" /> <a href="#redirecthome">Redirect Homedirs For Foreigners</a></li><li><img alt="" src="../images/down.gif" /> <a href="#redirectanchors">Redirecting Anchors</a></li><li><img alt="" src="../images/down.gif" /> Time-Dependent Rewriting</li><li><img alt="" src="../images/down.gif" /> Backward Compatibility for YYYY to XXXX migration</li><li><img alt="" src="../images/down.gif" /> <a href="#content">Content Handling</a></li><li><img alt="" src="../images/down.gif" /> <a href="#access">Access Restriction</a></li><li><img alt="" src="../images/down.gif" /> <a href="#other">Other</a></li></ul><h3>See also</h3><ul class="seealso"><li><a href="../mod/mod_rewrite.html">Moduledocumentation</a></li><li><a href="rewrite_intro.html">mod_rewriteintroduction</a></li><li><a href="rewrite_tech.html">Technical details</a></li></ul></div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2><a name="canonicalurl" id="canonicalurl">Canonical URLs</a></h2><dl> <dt>Description:</dt>   <dd>     <p>On some webservers there are more than one URL for a     resource. Usually there are canonical URLs (which should be     actually used and distributed) and those which are just     shortcuts, internal ones, etc. Independent of which URL the     user supplied with the request he should finally see the     canonical one only.</p>   </dd>   <dt>Solution:</dt>     <dd>       <p>We do an external HTTP redirect for all non-canonical       URLs to fix them in the location view of the Browser and       for all subsequent requests. In the example ruleset below       we replace <code>/~user</code> by the canonical       <code>/u/user</code> and fix a missing trailing slash for       <code>/u/user</code>.</p><div class="example"><pre>RewriteRule   ^/<strong>~</strong>([^/]+)/?(.*)    /<strong>u</strong>/$1/$2  [<strong>R</strong>]RewriteRule   ^/([uge])/(<strong>[^/]+</strong>)$  /$1/$2<strong>/</strong>   [<strong>R</strong>]</pre></div>        </dd>      </dl>    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2><a name="canonicalhost" id="canonicalhost">Canonical Hostnames</a></h2>      <dl>        <dt>Description:</dt>        <dd>The goal of this rule is to force the use of a particular        hostname, in preference to other hostnames which may be used to        reach the same site. For example, if you wish to force the use        of <strong>www.example.com</strong> instead of        <strong>example.com</strong>, you might use a variant of the        following recipe.</dd>        <dt>Solution:</dt>        <dd><p>For sites running on a port other than 80:</p><div class="example"><pre>RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]RewriteCond %{HTTP_HOST}   !^$RewriteCond %{SERVER_PORT} !^80$RewriteRule ^/(.*)         http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]</pre></div><p>And for a site running on port 80</p><div class="example"><pre>RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]RewriteCond %{HTTP_HOST}   !^$RewriteRule ^/(.*)         http://fully.qualified.domain.name/$1 [L,R]</pre></div>        </dd>      </dl>    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2><a name="moveddocroot" id="moveddocroot">Moved <code>DocumentRoot</code></a></h2>            <dl>        <dt>Description:</dt>        <dd><p>Usually the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>of the webserver directly relates to the URL "<code>/</code>".But often this data is not really of top-level priority. For example,you may wish for visitors, on first entering a site, to go to aparticular subdirectory <code>/about/</code>. This may be accomplishedusing the following ruleset:</p></dd>        <dt>Solution:</dt>        <dd>          <p>We redirect the URL <code>/</code> to          <code>/about/</code>:          </p>         <div class="example"><pre>RewriteEngine onRewriteRule   <strong>^/$</strong>  /about/  [<strong>R</strong>]</pre></div>    <p>Note that this can also be handled using the <code class="directive"><a href="../mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> directive:</p><div class="example"><p><code>RedirectMatch ^/$ http://example.com/e/www/</code></p></div></dd></dl>    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2><a name="trailingslash" id="trailingslash">Trailing Slash Problem</a></h2>            <dl>        <dt>Description:</dt>    <dd><p>The vast majority of "trailing slash" problems can be dealt    with using the techniques discussed in the <a href="http://httpd.apache.org/docs/misc/FAQ-E.html#set-servername">FAQ    entry</a>. However, occasionally, there is a need to use mod_rewrite    to handle a case where a missing trailing slash causes a URL to    fail. This can happen, for example, after a series of complex    rewrite rules.</p>    </dd>        <dt>Solution:</dt>        <dd>          <p>The solution to this subtle problem is to let the server          add the trailing slash automatically. To do this          correctly we have to use an external redirect, so the          browser correctly requests subsequent images etc. If we          only did a internal rewrite, this would only work for the          directory page, but would go wrong when any images are          included into this page with relative URLs, because the          browser would request an in-lined object. For instance, a          request for <code>image.gif</code> in          <code>/~quux/foo/index.html</code> would become          <code>/~quux/image.gif</code> without the external          redirect!</p>          <p>So, to do this trick we write:</p><div class="example"><pre>RewriteEngine  onRewriteBase    /~quux/RewriteRule    ^foo<strong>$</strong>  foo<strong>/</strong>  [<strong>R</strong>]</pre></div>   <p>Alternately, you can put the following in a   top-level <code>.htaccess</code> file in the content directory.   But note that this creates some processing overhead.</p><div class="example"><pre>RewriteEngine  onRewriteBase    /~quux/RewriteCond    %{REQUEST_FILENAME}  <strong>-d</strong>RewriteRule    ^(.+<strong>[^/]</strong>)$           $1<strong>/</strong>  [R]</pre></div>        </dd>      </dl>    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2><a name="movehomedirs" id="movehomedirs">Move Homedirs to Different Webserver</a></h2>            <dl>        <dt>Description:</dt>        <dd>          <p>Many webmasters have asked for a solution to the          following situation: They wanted to redirect just all          homedirs on a webserver to another webserver. They usually          need such things when establishing a newer webserver which          will replace the old one over time.</p>        </dd>        <dt>Solution:</dt>        <dd>          <p>The solution is trivial with <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.          On the old webserver we just redirect all          <code>/~user/anypath</code> URLs to          <code>http://newserver/~user/anypath</code>.</p><div class="example"><pre>RewriteEngine onRewriteRule   ^/~(.+)  http://<strong>newserver</strong>/~$1  [R,L]</pre></div>        </dd>      </dl>    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2><a name="multipledirs" id="multipledirs">Search pages in more than one directory</a></h2>            <dl>        <dt>Description:</dt>        <dd>          <p>Sometimes it is necessary to let the webserver search          for pages in more than one directory. Here MultiViews or          other techniques cannot help.</p>        </dd>        <dt>Solution:</dt>        <dd>          <p>We program a explicit ruleset which searches for the          files in the directories.</p><div class="example"><pre>RewriteEngine on#   first try to find it in custom/...#   ...and if found stop and be happy:RewriteCond         /your/docroot/<strong>dir1</strong>/%{REQUEST_FILENAME}  -fRewriteRule  ^(.+)  /your/docroot/<strong>dir1</strong>/$1  [L]#   second try to find it in pub/...#   ...and if found stop and be happy:RewriteCond         /your/docroot/<strong>dir2</strong>/%{REQUEST_FILENAME}  -fRewriteRule  ^(.+)  /your/docroot/<strong>dir2</strong>/$1  [L]#   else go on for other Alias or ScriptAlias directives,#   etc.RewriteRule   ^(.+)  -  [PT]</pre></div>        </dd>      </dl>    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2><a name="setenvvars" id="setenvvars">Set Environment Variables According To URL Parts</a></h2>            <dl>        <dt>Description:</dt>        <dd>          <p>Perhaps you want to keep status information between          requests and use the URL to encode it. But you don't want          to use a CGI wrapper for all pages just to strip out this          information.</p>        </dd>        <dt>Solution:</dt>        <dd>          <p>We use a rewrite rule to strip out the status information          and remember it via an environment variable which can be          later dereferenced from within XSSI or CGI. This way a          URL <code>/foo/S=java/bar/</code> gets translated to          <code>/foo/bar/</code> and the environment variable named          <code>STATUS</code> is set to the value "java".</p><div class="example"><pre>RewriteEngine onRewriteRule   ^(.*)/<strong>S=([^/]+)</strong>/(.*)    $1/$3 [E=<strong>STATUS:$2</strong>]</pre></div>        </dd>      </dl>    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2><a name="uservhosts" id="uservhosts">Virtual User Hosts</a></h2>            <dl>        <dt>Description:</dt>        <dd>          <p>Assume that you want to provide          <code>www.<strong>username</strong>.host.domain.com</code>          for the homepage of username via just DNS A records to the          same machine and without any virtualhosts on this          machine.</p>        </dd>        <dt>Solution:</dt>        <dd>          <p>For HTTP/1.0 requests there is no solution, but for          HTTP/1.1 requests which contain a Host: HTTP header we          can use the following ruleset to rewrite          <code>http://www.username.host.com/anypath</code>          internally to <code>/home/username/anypath</code>:</p><div class="example"><pre>RewriteEngine onRewriteCond   %{<strong>HTTP_HOST</strong>}                 ^www\.<strong>[^.]+</strong>\.host\.com$RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]RewriteRule   ^www\.<strong>([^.]+)</strong>\.host\.com(.*) /home/<strong>$1</strong>$2</pre></div>        </dd>      </dl>    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2><a name="redirecthome" id="redirecthome">Redirect Homedirs For Foreigners</a></h2>            <dl>        <dt>Description:</dt>        <dd>          <p>We want to redirect homedir URLs to another webserver          <code>www.somewhere.com</code> when the requesting user          does not stay in the local domain          <code>ourdomain.com</code>. This is sometimes used in          virtual host contexts.</p>        </dd>        <dt>Solution:</dt>        <dd>          <p>Just a rewrite condition:</p><div class="example"><pre>RewriteEngine onRewriteCond   %{REMOTE_HOST}  <strong>!^.+\.ourdomain\.com$</strong>RewriteRule   ^(/~.+)         http://www.somewhere.com/$1 [R,L]</pre></div>        </dd>      </dl>    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section">

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -