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

📄 rewrite_guide_advanced.html.en

📁 apache的软件linux版本
💻 EN
📖 第 1 页 / 共 4 页
字号:
<?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 - Advanced topics - 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 - Advanced topics</h1><div class="toplang"><p><span>Available Languages: </span><a href="../en/rewrite/rewrite_guide_advanced.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="#cluster">Webcluster through Homogeneous URL Layout</a></li><li><img alt="" src="../images/down.gif" /> <a href="#structuredhomedirs">Structured Homedirs</a></li><li><img alt="" src="../images/down.gif" /> <a href="#filereorg">Filesystem Reorganization</a></li><li><img alt="" src="../images/down.gif" /> <a href="#redirect404">Redirect Failing URLs To Other Webserver</a></li><li><img alt="" src="../images/down.gif" /> Archive Access Multiplexer</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></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="cluster" id="cluster">Webcluster through Homogeneous URL Layout</a></h2>            <dl>        <dt>Description:</dt>        <dd>          <p>We want to create a homogeneous and consistent URL          layout over all WWW servers on a Intranet webcluster, i.e.          all URLs (per definition server local and thus server          dependent!) become actually server <em>independent</em>!          What we want is to give the WWW namespace a consistent          server-independent layout: no URL should have to include          any physically correct target server. The cluster itself          should drive us automatically to the physical target          host.</p>        </dd>        <dt>Solution:</dt>        <dd>          <p>First, the knowledge of the target servers come from          (distributed) external maps which contain information          where our users, groups and entities stay. The have the          form</p><div class="example"><pre>user1  server_of_user1user2  server_of_user2:      :</pre></div>          <p>We put them into files <code>map.xxx-to-host</code>.          Second we need to instruct all servers to redirect URLs          of the forms</p><div class="example"><pre>/u/user/anypath/g/group/anypath/e/entity/anypath</pre></div>          <p>to</p><div class="example"><pre>http://physical-host/u/user/anypathhttp://physical-host/g/group/anypathhttp://physical-host/e/entity/anypath</pre></div>          <p>when the URL is not locally valid to a server. The          following ruleset does this for us by the help of the map          files (assuming that server0 is a default server which          will be used if a user has no entry in the map):</p><div class="example"><pre>RewriteEngine onRewriteMap      user-to-host   txt:/path/to/map.user-to-hostRewriteMap     group-to-host   txt:/path/to/map.group-to-hostRewriteMap    entity-to-host   txt:/path/to/map.entity-to-hostRewriteRule   ^/u/<strong>([^/]+)</strong>/?(.*)   http://<strong>${user-to-host:$1|server0}</strong>/u/$1/$2RewriteRule   ^/g/<strong>([^/]+)</strong>/?(.*)  http://<strong>${group-to-host:$1|server0}</strong>/g/$1/$2RewriteRule   ^/e/<strong>([^/]+)</strong>/?(.*) http://<strong>${entity-to-host:$1|server0}</strong>/e/$1/$2RewriteRule   ^/([uge])/([^/]+)/?$          /$1/$2/.www/RewriteRule   ^/([uge])/([^/]+)/([^.]+.+)   /$1/$2/.www/$3\</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="structuredhomedirs" id="structuredhomedirs">Structured Homedirs</a></h2>            <dl>        <dt>Description:</dt>        <dd>          <p>Some sites with thousands of users usually use a          structured homedir layout, i.e. each homedir is in a          subdirectory which begins for instance with the first          character of the username. So, <code>/~foo/anypath</code>          is <code>/home/<strong>f</strong>/foo/.www/anypath</code>          while <code>/~bar/anypath</code> is          <code>/home/<strong>b</strong>/bar/.www/anypath</code>.</p>        </dd>        <dt>Solution:</dt>        <dd>          <p>We use the following ruleset to expand the tilde URLs          into exactly the above layout.</p><div class="example"><pre>RewriteEngine onRewriteRule   ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*)  /home/<strong>$2</strong>/$1/.www$3</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="filereorg" id="filereorg">Filesystem Reorganization</a></h2>            <dl>        <dt>Description:</dt>        <dd>          <p>This really is a hardcore example: a killer application          which heavily uses per-directory          <code>RewriteRules</code> to get a smooth look and feel          on the Web while its data structure is never touched or          adjusted. Background: <strong><em>net.sw</em></strong> is          my archive of freely available Unix software packages,          which I started to collect in 1992. It is both my hobby          and job to to this, because while I'm studying computer          science I have also worked for many years as a system and          network administrator in my spare time. Every week I need          some sort of software so I created a deep hierarchy of          directories where I stored the packages:</p><div class="example"><pre>drwxrwxr-x   2 netsw  users    512 Aug  3 18:39 Audio/drwxrwxr-x   2 netsw  users    512 Jul  9 14:37 Benchmark/drwxrwxr-x  12 netsw  users    512 Jul  9 00:34 Crypto/drwxrwxr-x   5 netsw  users    512 Jul  9 00:41 Database/drwxrwxr-x   4 netsw  users    512 Jul 30 19:25 Dicts/drwxrwxr-x  10 netsw  users    512 Jul  9 01:54 Graphic/drwxrwxr-x   5 netsw  users    512 Jul  9 01:58 Hackers/drwxrwxr-x   8 netsw  users    512 Jul  9 03:19 InfoSys/drwxrwxr-x   3 netsw  users    512 Jul  9 03:21 Math/drwxrwxr-x   3 netsw  users    512 Jul  9 03:24 Misc/drwxrwxr-x   9 netsw  users    512 Aug  1 16:33 Network/drwxrwxr-x   2 netsw  users    512 Jul  9 05:53 Office/drwxrwxr-x   7 netsw  users    512 Jul  9 09:24 SoftEng/drwxrwxr-x   7 netsw  users    512 Jul  9 12:17 System/drwxrwxr-x  12 netsw  users    512 Aug  3 20:15 Typesetting/drwxrwxr-x  10 netsw  users    512 Jul  9 14:08 X11/</pre></div>          <p>In July 1996 I decided to make this archive public to          the world via a nice Web interface. "Nice" means that I          wanted to offer an interface where you can browse          directly through the archive hierarchy. And "nice" means          that I didn't wanted to change anything inside this          hierarchy - not even by putting some CGI scripts at the          top of it. Why? Because the above structure should be          later accessible via FTP as well, and I didn't want any          Web or CGI stuff to be there.</p>        </dd>        <dt>Solution:</dt>        <dd>          <p>The solution has two parts: The first is a set of CGI          scripts which create all the pages at all directory          levels on-the-fly. I put them under          <code>/e/netsw/.www/</code> as follows:</p><div class="example"><pre>-rw-r--r--   1 netsw  users    1318 Aug  1 18:10 .wwwacldrwxr-xr-x  18 netsw  users     512 Aug  5 15:51 DATA/-rw-rw-rw-   1 netsw  users  372982 Aug  5 16:35 LOGFILE-rw-r--r--   1 netsw  users     659 Aug  4 09:27 TODO-rw-r--r--   1 netsw  users    5697 Aug  1 18:01 netsw-about.html-rwxr-xr-x   1 netsw  users     579 Aug  2 10:33 netsw-access.pl-rwxr-xr-x   1 netsw  users    1532 Aug  1 17:35 netsw-changes.cgi-rwxr-xr-x   1 netsw  users    2866 Aug  5 14:49 netsw-home.cgidrwxr-xr-x   2 netsw  users     512 Jul  8 23:47 netsw-img/-rwxr-xr-x   1 netsw  users   24050 Aug  5 15:49 netsw-lsdir.cgi-rwxr-xr-x   1 netsw  users    1589 Aug  3 18:43 netsw-search.cgi-rwxr-xr-x   1 netsw  users    1885 Aug  1 17:41 netsw-tree.cgi-rw-r--r--   1 netsw  users     234 Jul 30 16:35 netsw-unlimit.lst</pre></div>          <p>The <code>DATA/</code> subdirectory holds the above          directory structure, i.e. the real          <strong><em>net.sw</em></strong> stuff and gets          automatically updated via <code>rdist</code> from time to          time. The second part of the problem remains: how to link          these two structures together into one smooth-looking URL          tree? We want to hide the <code>DATA/</code> directory          from the user while running the appropriate CGI scripts          for the various URLs. Here is the solution: first I put          the following into the per-directory configuration file          in the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>          of the server to rewrite the announced URL          <code>/net.sw/</code> to the internal path          <code>/e/netsw</code>:</p><div class="example"><pre>RewriteRule  ^net.sw$       net.sw/        [R]RewriteRule  ^net.sw/(.*)$  e/netsw/$1</pre></div>          <p>The first rule is for requests which miss the trailing          slash! The second rule does the real thing. And then          comes the killer configuration which stays in the          per-directory config file          <code>/e/netsw/.www/.wwwacl</code>:</p><div class="example"><pre>Options       ExecCGI FollowSymLinks Includes MultiViewsRewriteEngine on#  we are reached via /net.sw/ prefixRewriteBase   /net.sw/#  first we rewrite the root dir to#  the handling cgi scriptRewriteRule   ^$                       netsw-home.cgi     [L]RewriteRule   ^index\.html$            netsw-home.cgi     [L]#  strip out the subdirs when#  the browser requests us from perdir pagesRewriteRule   ^.+/(netsw-[^/]+/.+)$    $1                 [L]#  and now break the rewriting for local filesRewriteRule   ^netsw-home\.cgi.*       -                  [L]RewriteRule   ^netsw-changes\.cgi.*    -                  [L]RewriteRule   ^netsw-search\.cgi.*     -                  [L]RewriteRule   ^netsw-tree\.cgi$        -                  [L]RewriteRule   ^netsw-about\.html$      -                  [L]RewriteRule   ^netsw-img/.*$           -                  [L]#  anything else is a subdir which gets handled#  by another cgi scriptRewriteRule   !^netsw-lsdir\.cgi.*     -                  [C]RewriteRule   (.*)                     netsw-lsdir.cgi/$1</pre></div>          <p>Some hints for interpretation:</p>          <ol>            <li>Notice the <code>L</code> (last) flag and no            substitution field ('<code>-</code>') in the forth part</li>            <li>Notice the <code>!</code> (not) character and            the <code>C</code> (chain) flag at the first rule            in the last part</li>            <li>Notice the catch-all pattern in the last rule</li>          </ol>        </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="redirect404" id="redirect404">Redirect Failing URLs To Other Webserver</a></h2>            <dl>        <dt>Description:</dt>        <dd>          <p>A typical FAQ about URL rewriting is how to redirect          failing requests on webserver A to webserver B. Usually          this is done via <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code> CGI-scripts in Perl, but          there is also a <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> solution.

⌨️ 快捷键说明

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