| Current Path : /proc/thread-self/root/usr/share/doc/apache2-doc/manual/images/ |
| Current File : //proc/thread-self/root/usr/share/doc/apache2-doc/manual/images/rewrite_process_uri.svg |
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 472 560" width="472" height="560">
<defs>
<marker id="arrowhead" markerWidth="9" markerHeight="6" refX="8" refY="3" orient="auto">
<polygon points="0 0, 9 3, 0 6" fill="#333"/>
</marker>
<style>
text { font-family: Arial, Helvetica, sans-serif; font-size: 10px; fill: #333; }
.title { font-size: 11px; font-weight: bold; }
.label { font-size: 9px; fill: #555; }
rect.process { fill: #cce5ff; stroke: #004085; stroke-width: 1.3; rx: 4; ry: 4; }
polygon.decision { fill: #fff3cd; stroke: #856404; stroke-width: 1.3; }
ellipse.terminal { fill: #d4edda; stroke: #155724; stroke-width: 1.3; }
ellipse.start { fill: #f8d7da; stroke: #721c24; stroke-width: 1.3; }
line, path { stroke: #333; stroke-width: 1.2; fill: none; marker-end: url(#arrowhead); }
</style>
</defs>
<!-- Start: Request -->
<ellipse class="start" cx="236" cy="20" rx="45" ry="15"/>
<text x="236" y="24" text-anchor="middle">Request</text>
<line x1="236" y1="35" x2="236" y2="55"/>
<!-- Context decision -->
<polygon class="decision" points="236,55 330,78 236,101 142,78"/>
<text x="236" y="78" text-anchor="middle" font-size="9">Context?</text>
<!-- Per-server: left -->
<path d="M 142,78 C 100,78 70,78 70,103"/>
<text x="95" y="72" class="label">per-server</text>
<rect class="process" x="15" y="103" width="110" height="28"/>
<text x="70" y="115" text-anchor="middle" font-size="9">Strip prefix to</text>
<text x="70" y="126" text-anchor="middle" font-size="9">get URL-path</text>
<path d="M 70,131 C 70,150 180,155 210,163"/>
<!-- Per-directory: right -->
<path d="M 330,78 C 370,78 400,78 400,103"/>
<text x="350" y="72" class="label">per-directory</text>
<rect class="process" x="345" y="103" width="115" height="28"/>
<text x="402" y="115" text-anchor="middle" font-size="9">Strip per-dir prefix</text>
<text x="402" y="126" text-anchor="middle" font-size="9">to get remainder</text>
<path d="M 400,131 C 400,150 280,155 260,163"/>
<!-- Merge -->
<line x1="236" y1="163" x2="236" y2="178"/>
<!-- Find next RewriteRule -->
<rect class="process" x="166" y="178" width="140" height="26"/>
<text x="236" y="195" text-anchor="middle">Find next RewriteRule</text>
<line x1="236" y1="204" x2="236" y2="222"/>
<!-- More rules? -->
<polygon class="decision" points="236,222 316,240 236,258 156,240"/>
<text x="236" y="240" text-anchor="middle" font-size="9">More rules?</text>
<!-- No more rules → exit to "URL changed?" -->
<line x1="156" y1="240" x2="70" y2="240"/>
<text x="115" y="234" class="label">No</text>
<path d="M 70,240 C 50,240 40,250 40,440 C 40,460 80,460 156,460"/>
<text x="28" y="350" class="label" transform="rotate(90,28,350)">all rules done</text>
<!-- Yes → Pattern matches? -->
<line x1="236" y1="258" x2="236" y2="278"/>
<text x="244" y="270" class="label">Yes</text>
<!-- URL matches Pattern? -->
<polygon class="decision" points="236,278 326,298 236,318 146,298"/>
<text x="236" y="296" text-anchor="middle" font-size="9">URL matches</text>
<text x="236" y="307" text-anchor="middle" font-size="9">Pattern?</text>
<!-- No match → back to find next rule -->
<path d="M 326,298 C 380,298 390,240 390,204 C 390,190 340,191 306,191"/>
<text x="365" y="291" class="label">No</text>
<!-- Yes → Conditions -->
<line x1="236" y1="318" x2="236" y2="340"/>
<text x="244" y="332" class="label">Yes</text>
<!-- Evaluate RewriteCond(s) -->
<polygon class="decision" points="236,340 326,360 236,380 146,360"/>
<text x="236" y="357" text-anchor="middle" font-size="9">RewriteCond(s)</text>
<text x="236" y="368" text-anchor="middle" font-size="9">match?</text>
<!-- Conditions fail → back to next rule -->
<path d="M 146,360 C 100,360 80,320 80,270 C 80,220 120,191 166,191"/>
<text x="93" y="350" class="label">No</text>
<!-- Conditions pass → substitute -->
<line x1="236" y1="380" x2="236" y2="400"/>
<text x="244" y="393" class="label">Yes</text>
<!-- Substitute -->
<rect class="process" x="156" y="400" width="160" height="26"/>
<text x="236" y="417" text-anchor="middle">Substitute URL / filename</text>
<!-- After substitute → back to next rule -->
<path d="M 316,413 C 420,413 430,300 430,240 C 430,200 380,191 306,191"/>
<text x="435" y="310" class="label" transform="rotate(90,435,310)">next rule</text>
<!-- Also can exit via [L] flag -->
<line x1="236" y1="426" x2="236" y2="447"/>
<text x="244" y="440" class="label">[L] flag</text>
<!-- URL changed? decision -->
<polygon class="decision" points="236,447 316,465 236,483 156,465"/>
<text x="236" y="463" text-anchor="middle" font-size="9">URL</text>
<text x="236" y="474" text-anchor="middle" font-size="9">changed?</text>
<!-- No change → pass through to next phase -->
<line x1="316" y1="465" x2="390" y2="465"/>
<text x="345" y="459" class="label">No</text>
<ellipse class="terminal" cx="420" cy="465" rx="45" ry="14"/>
<text x="420" y="469" text-anchor="middle" font-size="9">Next phase</text>
<!-- Yes → redirect or restart -->
<line x1="236" y1="483" x2="236" y2="510"/>
<text x="244" y="498" class="label">Yes</text>
<!-- Per-server → redirect; per-dir → restart -->
<ellipse class="terminal" cx="150" cy="530" rx="55" ry="14"/>
<text x="150" y="534" text-anchor="middle" font-size="9">Redirect (per-server)</text>
<ellipse class="terminal" cx="330" cy="530" rx="60" ry="14"/>
<text x="330" y="534" text-anchor="middle" font-size="9">Restart (per-directory)</text>
<path d="M 220,510 C 190,510 170,520 150,516" style="marker-end: url(#arrowhead)"/>
<path d="M 252,510 C 280,510 310,520 330,516" style="marker-end: url(#arrowhead)"/>
</svg>