| <!DOCTYPE html SYSTEM "about:legacy-compat"> |
| <html lang="ja"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <meta content="width=device-width, initial-scale=1" name="viewport"> |
| <!-- |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| This file is generated from xml source: DO NOT EDIT |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| --> |
| <title>Apache mod_rewrite 技術的詳細 - Apache HTTP サーバ バージョン 2.5</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 rel="stylesheet" type="text/css" href="../style/css/prettify.css"> |
| <script src="../style/scripts/prettify.min.js"> |
| </script> |
| |
| <link href="../images/favicon.png" rel="shortcut icon"></head> |
| <body id="manual-page"><div id="page-header"> |
| <p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/quickreference.html">ディレクティブ</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Report a bug</a></p> |
| <p class="apache">Apache HTTP サーバ バージョン 2.5</p> |
| <img alt="" src="../images/feather.png"></div> |
| <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div> |
| <div id="path"> |
| <a href="https://www.apache.org/">Apache</a> > <a href="https://httpd.apache.org/">HTTP サーバ</a> > <a href="https://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.5</a> > <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Apache mod_rewrite 技術的詳細</h1> |
| <button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button> |
| <div class="toplang"> |
| <p><span>翻訳済み言語: </span><a href="../de/rewrite/tech.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> | |
| <a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English"> en </a> | |
| <a href="../es/rewrite/tech.html" hreflang="es" rel="alternate" title="Español"> es </a> | |
| <a href="../fr/rewrite/tech.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | |
| <a href="../ja/rewrite/tech.html" title="Japanese"> ja </a> | |
| <a href="../ko/rewrite/tech.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | |
| <a href="../tr/rewrite/tech.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | |
| <a href="../zh-cn/rewrite/tech.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> |
| </div> |
| <div class="outofdate">この日本語訳はすでに古くなっている |
| 可能性があります。 |
| 最近更新された内容を見るには英語版をご覧下さい。 |
| </div> |
| |
| <p>このドキュメントでは、<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> と URL マッチングの |
| 技術的な詳細について説明します。</p> |
| </div> |
| <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#InternalAPI">API フェーズ</a></li> |
| <li><img alt="" src="../images/down.gif"> <a href="#InternalRuleset">ルールセットの処理</a></li> |
| </ul><h3>参照</h3><ul class="seealso"><li><a href="../mod/mod_rewrite.html">モジュールドキュメント</a></li><li><a href="intro.html">mod_rewrite 入門</a></li><li><a href="remapping.html">リダイレクトとリマッピング</a></li><li><a href="access.html">アクセス制御</a></li><li><a href="vhosts.html">バーチャルホスト</a></li><li><a href="proxy.html">プロキシ</a></li><li><a href="rewritemap.html">RewriteMap の使用</a></li><li><a href="advanced.html">高度なテクニック</a></li><li><a href="avoid.html">mod_rewrite を使わない場合</a></li></ul></div> |
| <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="InternalAPI">API フェーズ <a title="Permanent link" href="#InternalAPI" class="permalink">¶</a></h2> |
| |
| <p>Apache HTTP Server は、いくつかのフェーズでリクエストを処理します。 |
| 各フェーズでは、リクエストライフサイクルのその部分を処理するために |
| 1 つ以上のモジュールが呼び出される可能性があります。フェーズには、 |
| URL からファイル名への変換、認証、認可、コンテンツ、ロギングなどが |
| 含まれます。(これは完全なリストではありません。)</p> |
| |
| <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> は、URL の書き換え方法に影響を与えるために、 |
| これらのフェーズ (しばしば「フック」と呼ばれます) のうち 2 つで |
| 動作します。</p> |
| |
| <p>まず、URL からファイル名への変換フックを使用します。これは |
| HTTP リクエストが読み取られた後、認可が開始される前に発生します。 |
| 次に、Fixup フックを使用します。これは認可フェーズの後、 |
| ディレクトリ単位の設定ファイル (<code>.htaccess</code> ファイル) |
| が読み取られた後、コンテンツハンドラが呼び出される前です。</p> |
| |
| <p>リクエストが到着し、対応するサーバまたはバーチャルホストが |
| 決定された後、書き換えエンジンはサーバ単位の設定に含まれる |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ディレクティブの処理を開始します。 |
| (つまり、メインサーバ設定ファイルと |
| <code class="directive"><a href="../mod/core.html#virtualhost"><Virtualhost></a></code> |
| セクション内のディレクティブです。) これは URL からファイル名への |
| 変換フェーズで発生します。</p> |
| |
| <p>数ステップ後、最終的なデータディレクトリが見つかると、 |
| ディレクトリ単位の設定ディレクティブ (<code>.htaccess</code> |
| ファイルと <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ブロック) が適用されます。 |
| これは Fixup フェーズで発生します。</p> |
| |
| <p>これらの各ケースで、<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> は |
| <code>REQUEST_URI</code> を新しい URL またはファイル名に |
| 書き換えます。</p> |
| |
| <p>ディレクトリ単位のコンテキスト (つまり <code>.htaccess</code> |
| ファイルと <code>Directory</code> ブロック内) では、URL が既に |
| ファイル名に変換された後にこれらのルールが適用されます。このため、 |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> が最初に <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ディレクティブと比較する |
| URL パスは、変換されたファイル名のフルファイルシステムパスから、 |
| 現在のディレクトリのパス (末尾のスラッシュを含む) を先頭から |
| 削除したものになります。</p> |
| |
| <p>例として: ルールが /var/www/foo/.htaccess にあり、 |
| /foo/bar/baz へのリクエストが処理されている場合、^bar/baz$ のような |
| 式がマッチします。</p> |
| |
| <p>ディレクトリ単位のコンテキストで置換が行われた場合、新しい URL で |
| 新しい内部サブリクエストが発行され、リクエストフェーズの処理が |
| 再開されます。置換が相対パスの場合、<code class="directive"><a href="../mod/mod_rewrite.html#rewritebase">RewriteBase</a></code> ディレクティブが |
| 置換の前に付加する URL パスプレフィックスを決定します。 |
| ディレクトリ単位のコンテキストでは、ループを避けるために、 |
| 最終的に (将来のディレクトリ単位の書き換え処理の「ラウンド」で) |
| 置換を行わないルールを作成するよう注意する必要があります。 |
| (この問題の詳細については |
| <a href="https://cwiki.apache.org/confluence/display/httpd/RewriteLooping">RewriteLooping</a> |
| を参照してください。)</p> |
| |
| <p>ディレクトリ単位のコンテキストでの URL のさらなる操作のため、 |
| そのコンテキストでは書き換えルールを異なるように作成するよう |
| 注意する必要があります。特に、先頭のディレクトリパスが書き換えルールが |
| 認識する URL から削除されることを忘れないでください。詳細については |
| 以下の例を参照してください。</p> |
| |
| <table class="bordered"> |
| |
| <tr> |
| <th>ルールの場所</th> |
| <th>ルール</th> |
| </tr> |
| |
| <tr> |
| <td>VirtualHost セクション</td> |
| <td>RewriteRule "^/images/(.+)\.jpg" "/images/$1.gif"</td> |
| </tr> |
| |
| <tr> |
| <td>ドキュメントルートの .htaccess ファイル</td> |
| <td>RewriteRule "^images/(.+)\.jpg" "images/$1.gif"</td> |
| </tr> |
| |
| <tr> |
| <td>images ディレクトリの .htaccess ファイル</td> |
| <td>RewriteRule "^(.+)\.jpg" "$1.gif"</td> |
| </tr> |
| |
| </table> |
| |
| <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> がさまざまなコンテキストで URL をどのように |
| 操作するかについてさらに詳しくは、書き換え中に作成される |
| <a href="../mod/mod_rewrite.html#logging">ログエントリ</a>を |
| 参照してください。</p> |
| |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> |
| <div class="section"> |
| <h2 id="InternalRuleset">ルールセットの処理 <a title="Permanent link" href="#InternalRuleset" class="permalink">¶</a></h2> |
| |
| <p>これら 2 つの API フェーズで <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> がトリガー |
| されると、設定構造体 (サーバ単位のコンテキストではスタートアップ時に |
| 作成されたもの、ディレクトリ単位のコンテキストでは Apache カーネルの |
| ディレクトリウォーク中に作成されたもの) から設定済みのルールセットを |
| 読み取ります。次に、含まれるルールセット (1 つ以上のルールとその |
| 条件のセット) を使用して URL 書き換えエンジンが起動されます。 |
| URL 書き換えエンジン自体の動作は、両方の設定コンテキストで |
| まったく同じです。最終結果の処理のみが異なります。</p> |
| |
| <p>ルールセット内のルールの順序は重要です。書き換えエンジンは |
| 特殊な (あまり直感的ではない) 順序でルールを処理するためです。 |
| ルールは次のとおりです: 書き換えエンジンはルールセットをルールごとに |
| (<code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> |
| ディレクティブ) ループし、特定のルールがマッチすると、対応する |
| 条件 (<code>RewriteCond</code> ディレクティブ) をオプションで |
| ループします。歴史的な理由により、条件が先に記述されるため、 |
| 制御フローは少し冗長になります。詳細は図 1 を参照してください。</p> |
| <p class="figure"> |
| <img src="../images/rewrite_process_uri.png" alt="RewriteRule と RewriteCond マッチングのフロー"><br> |
| <dfn>図 1:</dfn> 書き換えルールセットを通る制御フロー |
| </p> |
| <p>まず、URL が各ルールの <em>Pattern</em> に対してマッチされます。 |
| マッチしない場合、<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> はそのルールの処理を |
| 直ちに停止し、次のルールに進みます。<em>Pattern</em> がマッチすると、 |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> は対応するルール条件 (設定内の RewriteRule の |
| 直前に記述される RewriteCond ディレクティブ) を探します。 |
| 条件がない場合、URL を <em>Substitution</em> 文字列から構築された |
| 新しい値で置換し、ルールループを続行します。条件が存在する場合、 |
| 記述された順序で処理する内部ループを開始します。条件のロジックは |
| 異なります: 現在の URL に対してパターンをマッチさせるのではなく、 |
| まず変数の展開、バックリファレンス、マップ検索<em>等</em>を行って |
| <em>TestString</em> 文字列を作成し、それに対して |
| <em>CondPattern</em> をマッチさせようとします。パターンがマッチしない |
| 場合、条件のセット全体と対応するルールが失敗します。パターンが |
| マッチすると、次の条件が処理され、条件がなくなるまで続きます。 |
| すべての条件がマッチした場合、URL の <em>Substitution</em> による |
| 置換の処理が続行されます。</p> |
| |
| </div></div> |
| <div class="bottomlang"> |
| <p><span>翻訳済み言語: </span><a href="../de/rewrite/tech.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> | |
| <a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English"> en </a> | |
| <a href="../es/rewrite/tech.html" hreflang="es" rel="alternate" title="Español"> es </a> | |
| <a href="../fr/rewrite/tech.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | |
| <a href="../ja/rewrite/tech.html" title="Japanese"> ja </a> | |
| <a href="../ko/rewrite/tech.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | |
| <a href="../tr/rewrite/tech.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | |
| <a href="../zh-cn/rewrite/tech.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> |
| </div><div id="footer"> |
| <p class="apache">Copyright 2026 The Apache Software Foundation.<br>この文書は <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> |
| <p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/quickreference.html">ディレクティブ</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Report a bug</a></p></div><script><!--//--><![CDATA[//><!-- |
| if (typeof(prettyPrint) !== 'undefined') { |
| prettyPrint(); |
| } |
| var langToggle = document.querySelector('.lang-toggle'); |
| var topLang = document.querySelector('.toplang'); |
| if (langToggle && topLang) { |
| langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); }); |
| } |
| var qv = document.getElementById('quickview'); |
| if (qv) { |
| document.body.appendChild(qv); |
| var qvBtn = document.createElement('button'); |
| qvBtn.className = 'qv-toggle'; |
| qvBtn.setAttribute('aria-label', 'Toggle page navigation'); |
| qvBtn.innerHTML = '☰'; |
| document.body.appendChild(qvBtn); |
| qvBtn.addEventListener('click', function() { |
| var isOpen = qv.classList.toggle('open'); |
| if (isOpen) { |
| qv.style.top = window.scrollY + 10 + 'px'; |
| } |
| }); |
| window.addEventListener('scroll', function() { qv.classList.remove('open'); }); |
| } |
| //--><!]]></script> |
| </body></html> |