From: Ralf S. Engelschall Date: Mon, 21 Feb 2000 07:35:35 +0000 (+0000) Subject: Documentation fixes do not harm anyone, so I feel free to commit this X-Git-Tag: 1.3.12~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4cdb8a376e350b9430c83fd8321d31080e3e50bd;p=apache Documentation fixes do not harm anyone, so I feel free to commit this English cleanup to the mod_rewrite documentation although we're in code freeze state. But we should now really kick out the 1.3.12 baby. We're already behind the proposed dates... Submitted by: G.W. Haywood Reviewed by: Ralf S. Engelschall git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@84654 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/docs/manual/mod/mod_rewrite.html b/docs/manual/mod/mod_rewrite.html index cbd9e95945..38301fb677 100644 --- a/docs/manual/mod/mod_rewrite.html +++ b/docs/manual/mod/mod_rewrite.html @@ -81,13 +81,13 @@ matching.

This module operates on the full URLs (including the path-info part) both in per-server context (httpd.conf) and per-directory context -(.htaccess) and even can generate query-string parts on result. +(.htaccess) and can even generate query-string parts on result. The rewritten result can lead to internal sub-processing, external request redirection or even to an internal proxy throughput.

But all this functionality and flexibility has its drawback: complexity. So -don't expect to understand this module in its whole in just one day. +don't expect to understand this entire module in just one day.

This module was invented and originally written in April 1996
@@ -152,46 +152,46 @@ you exploit its full functionality. First you have to understand that when Apache processes a HTTP request it does this in phases. A hook for each of these phases is provided by the Apache API. Mod_rewrite uses two of these hooks: the URL-to-filename translation hook -which is used after the HTTP request was read and before any authorization +which is used after the HTTP request has been read but before any authorization starts and the Fixup hook which is triggered after the authorization phases -and after the per-directory config files (.htaccess) where read, -but before the content handler is activated. +and after the per-directory config files (.htaccess) have been +read, but before the content handler is activated.

So, after a request comes in and Apache has determined the corresponding -server (or virtual server) the rewriting engine start processing of all +server (or virtual server) the rewriting engine starts processing of all mod_rewrite directives from the per-server configuration in the URL-to-filename phase. A few steps later when the final data directories are found, the per-directory configuration directives of mod_rewrite are triggered -in the Fixup phase. In both situations mod_rewrite either rewrites URLs to new +in the Fixup phase. In both situations mod_rewrite rewrites URLs either to new URLs or to filenames, although there is no obvious distinction between them. -This is a usage of the API which was not intended this way when the API +This is a usage of the API which was not intended to be this way when the API was designed, but as of Apache 1.x this is the only way mod_rewrite can operate. To make this point more clear remember the following two points:

    -
  1. The API currently provides only a URL-to-filename hook. Although - mod_rewrite rewrites URLs to URLs, URLs to filenames and even - filenames to filenames. In Apache 2.0 the two missing hooks - will be added to make the processing more clear. But this - point has no drawbacks for the user, it is just a fact which - should be remembered: Apache does more in the URL-to-filename hook - then the API intends for it. +
  2. Although mod_rewrite rewrites URLs to URLs, URLs to filenames and + even filenames to filenames, the API currently provides only a + URL-to-filename hook. In Apache 2.0 the two missing hooks will be + added to make the processing more clear. But this point has no + drawbacks for the user, it is just a fact which should be + remembered: Apache does more in the URL-to-filename hook than the + API intends for it.

  3. Unbelievably mod_rewrite provides URL manipulations in per-directory - context, i.e., within .htaccess files, although - these are - reached a very long time after the URLs were translated to filenames (this - has to be this way, because .htaccess files stay in the - filesystem, so processing has already been reached this stage of - processing). In other words: According to the API phases at this time it - is too late for any URL manipulations. To overcome this chicken and egg - problem mod_rewrite uses a trick: When you manipulate a URL/filename in - per-directory context mod_rewrite first rewrites the filename back to its - corresponding URL (which it usually impossible, but see the - RewriteBase directive below for the trick to achieve this) - and then initiates a new internal sub-request with the new URL. This leads - to a new processing of the API phases from the beginning. + context, i.e., within .htaccess files, + although these are reached a very long time after the URLs have + been translated to filenames. It has to be this way because + .htaccess files live in the filesystem, so processing + has already reached this stage. In other words: According to the + API phases at this time it is too late for any URL manipulations. + To overcome this chicken and egg problem mod_rewrite uses a trick: + When you manipulate a URL/filename in per-directory context + mod_rewrite first rewrites the filename back to its corresponding + URL (which is usually impossible, but see the RewriteBase + directive below for the trick to achieve this) and then initiates + a new internal sub-request with the new URL. This restarts + processing of the API phases.

    Again mod_rewrite tries hard to make this complicated step totally transparent to the user, but you should remember here: While URL @@ -208,21 +208,21 @@ Don't forget these two points! Now when mod_rewrite is triggered in these two API phases, it reads the configured rulesets from its configuration structure (which itself was either -created on startup for per-server context or while the directory walk of the +created on startup for per-server context or during the directory walk of the Apache kernel for per-directory context). Then the URL rewriting engine is started with the contained ruleset (one or more rules together with their conditions). The operation of the URL rewriting engine itself is exactly the -same for both configuration contexts. Just the final result processing is +same for both configuration contexts. Only the final result processing is different.

    The order of rules in the ruleset is important because the rewriting engine -processes them in a special order. And this order is not very obvious. The +processes them in a special (and not very obvious) order. The rule is this: The rewriting engine loops through the ruleset rule by rule -(RewriteRule directives!) and when a particular rule matched it +(RewriteRule directives) and when a particular rule matches it optionally loops through existing corresponding conditions -(RewriteCond directives). Because of historical reasons the -conditions are given first, the control flow is a little bit winded. See +(RewriteCond directives). For historical reasons the conditions +are given first, and so the control flow is a little bit long-winded. See Figure 1 for more details.

    @@ -245,29 +245,29 @@ Figure 1 for more details.

    As you can see, first the URL is matched against the Pattern of each rule. When it fails mod_rewrite immediately stops processing this rule and -continues with the next rule. If the Pattern matched, mod_rewrite +continues with the next rule. If the Pattern matches, mod_rewrite looks for corresponding rule conditions. If none are present, it just substitutes the URL with a new value which is constructed from the string -Substitution and goes on with its rule-looping. But -if conditions exists, it starts an inner loop for processing them in order -they are listed. For conditions the logic is different: We don't match a +Substitution and goes on with its rule-looping. But if conditions +exist, it starts an inner loop for processing them in the order that +they are listed. For conditions the logic is different: we don't match a pattern against the current URL. Instead we first create a string TestString by expanding variables, back-references, map lookups, etc. and then we try to match CondPattern against it. If the pattern doesn't match, the complete set of conditions and the corresponding rule fails. If the pattern matches, then the next condition is processed -until no more condition is available. If all conditions matched processing is -continued with the substitution of the URL with Substitution. +until no more conditions are available. If all conditions match, processing +is continued with the substitution of the URL with Substitution.

    Regex Back-Reference Availability

    One important thing here has to be remembered: Whenever you -use parenthesis in Pattern or in one of the CondPattern -back-reference are internally created which can be used with the -strings $N and %N (see below). And these +use parentheses in Pattern or in one of the CondPattern +back-references are internally created which can be used with the +strings $N and %N (see below). These are available for creating the strings Substitution and -TestCond. Figure 2 shows at which locations the back-references are -transfered to for expansion. +TestCond. Figure 2 shows to which locations the back-references are +transfered for expansion.

    @@ -287,7 +287,7 @@ transfered to for expansion.

    -We know, this was a crash course of mod_rewrite's internal processing. But +We know this was a crash course on mod_rewrite's internal processing. But you will benefit from this knowledge when reading the following documentation of the available directives. @@ -342,12 +342,12 @@ environment variables.

    Use this directive to disable the module instead of commenting out -all RewriteRule directives! +all the RewriteRule directives!

    Note that, by default, rewrite configurations are not inherited. This means that you need to have a RewriteEngine on -directive for each virtual host you wish to use it in. +directive for each virtual host in which you wish to use it.


    @@ -393,9 +393,9 @@ strings can be one of the following:
  4. 'inherit'
    This forces the current configuration to inherit the configuration of the parent. In per-virtual-server context this means that the maps, - conditions and rules of the main server gets inherited. In per-directory + conditions and rules of the main server are inherited. In per-directory context this means that conditions and rules of the parent directory's - .htaccess configuration gets inherited. + .htaccess configuration are inherited.

    @@ -442,10 +442,10 @@ config.

    MapType: prg, MapSource: Unix filesystem path to valid regular file

    - Here the source is a Unix program, not a map file. To create it you can use - the language of your choice, but the result has to be a run-able Unix + Here the source is a program, not a map file. To create it you + can use the language of your choice, but the result has to be a executable (i.e., either object-code or a script with the - magic cookie trick '#!/path/to/interpreter' as the first - line). + magic cookie trick '#!/path/to/interpreter' as the + first line).

    - This program gets started once at startup of the Apache servers and then + This program is started once at startup of the Apache servers and then communicates with the rewriting engine over its stdin and stdout file-handles. For each map-function lookup it will receive the key to lookup as a newline-terminated string on @@ -783,8 +782,7 @@ close(TXT) #!/usr/bin/perl $| = 1; while (<STDIN>) { - # ...here any transformations - # or lookups should occur... + # ...put here any transformations or lookups... print $_; } @@ -792,15 +790,15 @@ while (<STDIN>) {

    But be very careful:

      -
    1. ``Keep the program simple, stupid'' (KISS), because - if this program hangs it will lead to a hang of the Apache server +
    2. ``Keep it simple, stupid'' (KISS), because + if this program hangs it will hang the Apache server when the rule occurs.
    3. Avoid one common mistake: never do buffered I/O on stdout! This will cause a deadloop! Hence the ``$|=1'' in the above example...
    4. Use the RewriteLock directive to define a lockfile mod_rewrite can use to synchronize the communication to the program. - Per default no such synchronization takes place. + By default no such synchronization takes place.
    @@ -813,7 +811,7 @@ this map in per-directory context.

    -Notice: To disable the logging of rewriting actions it is +Note: To disable the logging of rewriting actions it is not recommended to set Filename to /dev/null, because although the rewriting engine does -not create output to a logfile it still creates the logfile +not then output to a logfile it still creates the logfile output internally. This will slow down the server with no advantage to the administrator! To disable logging either remove or comment out the @@ -508,7 +508,7 @@ RewriteLog "/usr/local/var/apache/logs/rewrite.log" >Compatibility: Apache 1.2

    -The RewriteLogLevel directive set the verbosity level of the +The RewriteLogLevel directive sets the verbosity level of the rewriting logfile. The default level 0 means no logging, while 9 or more means that practically all actions are logged. @@ -521,9 +521,8 @@ This disables all rewrite action logs.
    Notice: Using a high value for Level will slow down -your Apache -server dramatically! Use the rewriting logfile only for debugging or at least -at Level not greater than 2! +your Apache server dramatically! Use the rewriting logfile at +a Level greater than 2 only for debugging!
    @@ -575,7 +574,7 @@ This directive sets the filename for a synchronization lockfile which mod_rewrite needs to communicate with RewriteMap programs. Set this lockfile to a local path (not on a NFS-mounted device) when you want to use a rewriting map-program. It is not required for -all other types of rewriting maps. +other types of rewriting maps.


    @@ -634,7 +633,7 @@ When such a construct occurs the map MapName is consulted and the key LookupKey is looked-up. If the key is found, the map-function construct is substituted by SubstValue. If the key is not found then it is substituted by DefaultValue or -the empty string if no DefaultValue was specified. +by the empty string if no DefaultValue was specified.

    The following combinations for MapType and MapSource @@ -683,8 +682,8 @@ RewriteMap real-to-user txt:/path/to/file/map.txt special post-processing feature: After looking up a value it is parsed according to contained ``|'' characters which have the meaning of - ``or''. Or - in other words: they indicate a set of alternatives from which the actual + ``or''. + In other words they indicate a set of alternatives from which the actual returned value is chosen randomly. Although this sounds crazy and useless, it was actually designed for load balancing in a reverse proxy situation where @@ -761,13 +760,13 @@ close(TXT)

    -Notice: For plain text and DBM format files the looked-up +Note: For plain text and DBM format files the looked-up keys are cached in-core until the mtime of the mapfile changes or the server does a restart. This way you can have map-functions in rules which are used @@ -863,15 +861,15 @@ per-directory rewrites. As you will see below, RewriteRule can be used in per-directory config files (.htaccess). There it will act locally, i.e., the local directory prefix is stripped at this stage of processing and your rewriting rules act only on the remainder. At the end -it is automatically added. +it is automatically added back to the path.

    When a substitution occurs for a new URL, this module has to re-inject the URL into the server processing. To be able to do this it needs to know what the corresponding URL-prefix or URL-base is. By default this prefix is the corresponding filepath itself. But at most websites URLs are -NOT directly related to physical filename paths, so this -assumption will be usually be wrong! There you have to use the +NOT directly related to physical filename paths, so this +assumption will usually be wrong! There you have to use the RewriteBase directive to specify the correct URL-prefix.

    @@ -902,7 +900,7 @@ directives. RewriteEngine On -# let the server know that we are reached via /xyz and not +# let the server know that we were reached via /xyz and not # via the physical path prefix /abc/def RewriteBase /xyz @@ -920,7 +918,7 @@ rewritten to the physical file /abc/def/newstuff.html.
    -Notice - For the Apache hackers:
    +Note - For Apache hackers:
    The following list gives detailed information about the internal processing steps: @@ -943,7 +941,7 @@ This seems very complicated but is the correct Apache internal processing, because the per-directory rewriting comes too late in the process. So, when it occurs the (rewritten) request has to be re-injected into the Apache kernel! BUT: While this seems like a serious overhead, it really isn't, because -this re-injection happens fully internal to the Apache server and the same +this re-injection happens fully internally to the Apache server and the same procedure is used by many other operations inside Apache. So, you can be sure the design and implementation is correct.
    @@ -1022,7 +1020,7 @@ the form %N -(1 <= N <= 9) which provide access to the grouped parts (parenthesis!) of +(1 <= N <= 9) which provide access to the grouped parts (parentheses!) of the pattern from the last matched RewriteCond directive in the current bunch of conditions. @@ -1035,7 +1033,7 @@ current bunch of conditions. where NAME_OF_VARIABLE can be a string -of the following list: +taken from the following list:

    @@ -1114,7 +1112,7 @@ IS_SUBREQ

    @@ -1151,7 +1149,7 @@ is the value of the HTTP header ``Proxy-Connection:''.
  5. There is the special format %{LA-U:variable} for look-aheads which perform an internal (URL-based) sub-request to determine the final value of variable. Use this when you want to use a variable for rewriting -which actually is set later in an API phase and thus is not available at the +which is actually set later in an API phase and thus is not available at the current stage. For instance when you want to rewrite according to the REMOTE_USER variable from within the per-server context (httpd.conf file) you have to use %{LA-U:REMOTE_USER} @@ -1163,16 +1161,16 @@ authorization phases come before this phase, you just can use %{REMOTE_USER} there.

    -

  6. There is the special format: %{LA-F:variable} which perform an +
  7. There is the special format: %{LA-F:variable} which performs an internal (filename-based) sub-request to determine the final value of -variable. This is the most of the time the same as LA-U above. +variable. Most of the time this is the same as LA-U above.

    CondPattern is the condition pattern, i.e., a regular expression -which gets applied to the current instance of the TestString, -i.e., TestString gets evaluated and then matched against +which is applied to the current instance of the TestString, +i.e., TestString is evaluated and then matched against CondPattern.

    @@ -1180,7 +1178,7 @@ which gets applied to the current instance of the TestString, Extended Regular Expression with some additions:

      -
    1. You can precede the pattern string with a '!' character +
    2. You can prefix the pattern string with a '!' character (exclamation mark) to specify a non-matching pattern.

      @@ -1189,23 +1187,23 @@ There are some special variants of CondPatterns. Instead of real regular expression strings you can also use one of the following:

        -
      • '<CondPattern' (is lexicographically lower)
        +
      • '<CondPattern' (is lexically lower)
        Treats the CondPattern as a plain string and compares it -lexicographically to TestString and results in a true expression if -TestString is lexicographically lower than CondPattern. +lexically to TestString. True if +TestString is lexically lower than CondPattern.

        -

      • '>CondPattern' (is lexicographically greater)
        +
      • '>CondPattern' (is lexically greater)
        Treats the CondPattern as a plain string and compares it -lexicographically to TestString and results in a true expression if -TestString is lexicographically greater than CondPattern. +lexically to TestString. True if +TestString is lexically greater than CondPattern.

        -

      • '=CondPattern' (is lexicographically equal)
        +
      • '=CondPattern' (is lexically equal)
        Treats the CondPattern as a plain string and compares it -lexicographically to TestString and results in a true expression if -TestString is lexicographically equal to CondPattern, i.e the +lexically to TestString. True if +TestString is lexically equal to CondPattern, i.e the two strings are exactly equal (character by character). If CondPattern is just "" (two quotation marks) this -compares TestString against the empty string. +compares TestString to the empty string.

      • '-d' (is directory)
        Treats the TestString as a pathname and @@ -1240,7 +1238,7 @@ your server's performance!
  8. -Notice: These variables all correspond to the similar named +Notice: These variables all correspond to the similarly named HTTP MIME-headers, C variables of the Apache server or struct tm fields of the Unix system.
    Notice: -All of these tests can also be prefixed by a not ('!') character +All of these tests can also be prefixed by an exclamation mark ('!') to negate their meaning.
    @@ -1258,7 +1256,7 @@ is a comma-separated list of the following flags:

    • 'nocase|NC' (no case)
      - This makes the condition test case-insensitive, i.e., there is + This makes the test case-insensitive, i.e., there is no difference between 'A-Z' and 'a-z' both in the expanded TestString and the CondPattern.

      @@ -1272,7 +1270,7 @@ RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule ...some special stuff for any of these hosts... - Without this flag you had to write down the cond/rule three times. + Without this flag you would have to write the cond/rule three times.

    @@ -1341,12 +1339,13 @@ rewriting rule. The definition order of these rules is run-time.

    -Pattern can be (for Apache 1.1.x a System -V8 and for Apache 1.2.x a POSIX) regular expression -which gets applied to the current URL. Here ``current'' means the value of the -URL when this rule gets applied. This may not be the original requested -URL, because there could be any number of rules before which already matched -and made alterations to it. +Pattern can be (for Apache +1.1.x a System V8 and for Apache 1.2.x and later a POSIX) regular expression which gets applied to the current +URL. Here ``current'' means the value of the URL when this rule gets +applied. This may not be the originally requested URL, because no +longer existingany number of rules may already have matched and made +alterations to it.

    Some hints about the syntax of regular expressions: @@ -1388,8 +1387,8 @@ Some hints about the syntax of regular expressions:

    For more information about regular expressions either have a look at your local regex(3) manpage or its src/regex/regex.3 copy in the -Apache 1.3 distribution. When you are interested in more detailed and deeper -information about regular expressions and its variants (POSIX regex, Perl +Apache 1.3 distribution. If you are interested in more detailed +information about regular expressions and their variants (POSIX regex, Perl regex, etc.) have a look at the following dedicated book on this topic:

    @@ -1403,9 +1402,9 @@ ISBN 1-56592-257-3

    Additionally in mod_rewrite the NOT character ('!') is a possible pattern prefix. This gives you the ability to negate a pattern; to say, for -instance: ``if the current URL does NOT match to this -pattern''. This can be used for special cases where it is better to match -the negative pattern or as a last default rule. +instance: ``if the current URL does NOT match this +pattern''. This can be used for exceptional cases, where it is easier to +match the negative pattern, or as a last default rule.

    @@ -1442,8 +1441,8 @@ the above list. As already mentioned above, all the rewriting rules are applied to the Substitution (in the order of definition in the config file). The URL is completely replaced by the Substitution and the -rewriting process goes on until there are no more rules (unless explicitly -terminated by a L flag - see below). +rewriting process goes on until there are no more rules unless explicitly +terminated by a L flag - see below.

    There is a special substitution string named '-' which means: @@ -1462,7 +1461,7 @@ substitution string with just the question mark.

    -Notice: There is a special feature. When you prefix a substitution +Note: There is a special feature: When you prefix a substitution field with http://thishost[:thisport] then mod_rewrite automatically strips it out. This auto-reduction on implicit external redirect URLs is a useful and important feature when @@ -1502,14 +1501,14 @@ comma-separated list of the following flags: one of the following symbolic names: temp (default), permanent, seeother. Use it for rules which should - canonicalize the URL and gives it back to the client, e.g., translate + canonicalize the URL and give it back to the client, e.g., translate ``/~'' into ``/u/'' or always append a slash to /u/user, etc.

    - Notice: When you use this flag, make sure that the + Note: When you use this flag, make sure that the substitution field is a valid URL! If not, you are redirecting to an invalid location! And remember that this flag itself only prefixes the - URL with http://thishost[:thisport]/, but rewriting goes on. + URL with http://thishost[:thisport]/, rewriting continues. Usually you also want to stop and do the redirection immediately. To stop the rewriting you also have to provide the 'L' flag.

    @@ -1520,8 +1519,8 @@ comma-separated list of the following flags:

  9. 'gone|G' (force URL to be gone)
    This forces the current URL to be gone, i.e., it immediately sends back a - HTTP response of 410 (GONE). Use this flag to mark no longer existing - pages as gone. + HTTP response of 410 (GONE). Use this flag to mark pages which no longer + exist as gone.

  10. 'proxy|P' (force proxy)
    This flag forces the substitution part to be internally forced as a proxy @@ -1546,7 +1545,7 @@ comma-separated list of the following flags: don't apply any more rewriting rules. This corresponds to the Perl last command or the break command from the C language. Use this flag to prevent the currently rewritten URL from being - rewritten further by following rules which may be wrong. For + rewritten further by following rules. For example, use it to rewrite the root-path URL ('/') to a real one, e.g., '/e/www/'.

    @@ -1557,11 +1556,11 @@ comma-separated list of the following flags: next command or the continue command from the C language. Use this flag to restart the rewriting process, i.e., to immediately go to the top of the loop.
    - But be careful not to create a deadloop! + But be careful not to create an infinite loop!

  11. 'chain|C' (chained with next rule)
    This flag chains the current rule with the next rule (which itself can - also be chained with its following rule, etc.). This has the following + be chained with the following rule, etc.). This has the following effect: if a rule matches, then processing continues as usual, i.e., the flag has no effect. If the rule does not match, then all following chained rules are skipped. For instance, use it to remove the @@ -1622,7 +1621,7 @@ comma-separated list of the following flags: translator should do. Then mod_alias comes and tries to do a URI-to-filename transition which will not work.

    - Notice: You have to use this flag if you want to intermix directives + Note: You have to use this flag if you want to intermix directives of different modules which contain URL-to-filename translators. The typical example is the use of mod_alias and mod_rewrite.. @@ -1630,12 +1629,12 @@ comma-separated list of the following flags:
    - Notice - For the Apache hackers:
    + Note - For Apache hackers:
    If the current Apache API had a filename-to-filename hook additionally to the URI-to-filename hook then we wouldn't need this flag! But without such a hook this flag is the only solution. The Apache Group has discussed this problem and will - add such hooks into Apache version 2.0. + add such a hook in Apache version 2.0.
    @@ -1644,7 +1643,7 @@ comma-separated list of the following flags: This flag forces the rewriting engine to skip the next num rules in sequence when the current rule matches. Use this to make pseudo if-then-else constructs: The last rule of the then-clause becomes - a skip=N where N is the number of rules in the else-clause. + skip=N where N is the number of rules in the else-clause. (This is not the same as the 'chain|C' flag!)

  12. 'env|E=VAR:VAL' (set environment variable)
    @@ -1652,9 +1651,9 @@ comma-separated list of the following flags: value VAL, where VAL can contain regexp backreferences $N and %N which will be expanded. You can use this flag more than once to set more than one variable. The variables can be later - dereferenced at a lot of situations, but the usual location will be from + dereferenced in many situations, but usually from within XSSI (via <!--#echo var="VAR"-->) or CGI (e.g. - $ENV{'VAR'}). But additionally you can also dereference it in a + $ENV{'VAR'}). Additionally you can dereference it in a following RewriteCond pattern via %{ENV:VAR}. Use this to strip but remember information from URLs. @@ -1662,16 +1661,16 @@ comma-separated list of the following flags:

    -Notice: Never forget that Pattern gets applied to a complete URL +Note: Never forget that Pattern is applied to a complete URL in per-server configuration files. But in per-directory configuration files, the per-directory prefix (which always is the same for a specific -directory!) gets automatically removed for the pattern matching and +directory!) is automatically removed for the pattern matching and automatically added after the substitution has been done. This feature is essential for many sorts of rewriting, because without this prefix stripping you have to match the parent directory which is not always possible.

    There is one exception: If a substitution string starts with -``http://'' then the directory prefix will be not added and a +``http://'' then the directory prefix will not be added and an external redirect or proxy throughput (if flag P is used!) is forced!

    @@ -1679,9 +1678,9 @@ external redirect or proxy throughput (if flag P is used!) is f

    -Notice: To enable the rewriting engine for per-directory configuration files +Note: To enable the rewriting engine for per-directory configuration files you need to set ``RewriteEngine On'' in these files and -``Option FollowSymLinks'' enabled. If your administrator has +``Option FollowSymLinks'' must be enabled. If your administrator has disabled override of FollowSymLinks for a user's directory, then you cannot use the rewriting engine. This restriction is needed for security reasons. @@ -1835,7 +1834,7 @@ variables SCRIPT_NAME and SCRIPT_FILENAME contain the

    Notice: These variables hold the URI/URL as they were initially -requested, i.e., in a state before any rewriting. This is +requested, i.e., before any rewriting. This is important because the rewriting process is primarily used to rewrite logical URLs to physical pathnames.