blob: eff4a237e117c4cdaa3bda4e76119eb326574e40 [file]
<!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>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> &gt; <a href="https://httpd.apache.org/">HTTP サーバ</a> &gt; <a href="https://httpd.apache.org/docs/">ドキュメンテーション</a> &gt; <a href="../">バージョン 2.5</a> &gt; <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>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/remapping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="../en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/rewrite/remapping.html" hreflang="es" rel="alternate" title="Espa&ntilde;ol">&nbsp;es&nbsp;</a> |
<a href="../fr/rewrite/remapping.html" hreflang="fr" rel="alternate" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/rewrite/remapping.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/rewrite/remapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/rewrite/remapping.html" hreflang="tr" rel="alternate" title="T&uuml;rk&ccedil;e">&nbsp;tr&nbsp;</a> |
<a href="../zh-cn/rewrite/remapping.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese">&nbsp;zh-cn&nbsp;</a></p>
</div>
<div class="outofdate">この日本語訳はすでに古くなっている
可能性があります。
最近更新された内容を見るには英語版をご覧下さい。
</div>
<p>このドキュメントは <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
<a href="../mod/mod_rewrite.html">リファレンスドキュメント</a>を補足するものです。
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> を使用してリクエストをリダイレクトおよびリマッピング
する方法を説明します。<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> の一般的な使用例を多数含んでおり、
それぞれの動作についての詳細な説明も含まれています。</p>
<div class="warning">これらの例の多くは、特定のサーバ設定ではそのまま
動作しないことに注意してください。そのため、単にコピー&ペーストするのではなく、
内容を理解することが重要です。</div>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#old-to-new">旧 URL から新 URL へ (内部)</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#old-to-new-extern">旧 URL から新 URL への書き換え (外部)</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#movehomedirs">リソースの別サーバへの移動</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#static-to-dynamic">静的から動的へ</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#backward-compatibility">ファイル拡張子変更の後方互換性</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#canonicalhost">正規ホスト名</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#multipledirs">複数のディレクトリでのページ検索</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#archive-access-multiplexer">地理的に分散されたサーバへのリダイレクト</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#canonicalurl">正規 URL</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#moveddocroot"><code>DocumentRoot</code> の移動</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#fallback-resource">フォールバックリソース</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#rewrite-query">クエリ文字列の書き換え</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="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="old-to-new">旧 URL から新 URL へ (内部) <a title="Permanent link" href="#old-to-new" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>
<p>最近ページ <code>foo.html</code><code>bar.html</code>
リネームし、後方互換性のために旧 URL も提供したいとします。
ただし、旧 URL のユーザにはページがリネームされたことを
気づかせたくありません - つまり、ブラウザのアドレスが
変更されないようにします。</p>
</dd>
<dt>解決方法:</dt>
<dd>
<p>以下のルールで旧 URL を内部的に新しいものに書き換えます:</p>
<pre class="prettyprint lang-config">RewriteEngine on
RewriteRule "^<strong>/foo</strong>\.html$" "<strong>/bar</strong>.html" [PT]</pre>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="old-to-new-extern">旧 URL から新 URL への書き換え (外部) <a title="Permanent link" href="#old-to-new-extern" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>
<p>再び、最近ページ <code>foo.html</code><code>bar.html</code>
にリネームし、後方互換性のために旧 URL を提供したいとします。
しかし今回は、旧 URL のユーザに新しい URL を知らせたい、
つまりブラウザの Location フィールドも変更されるようにしたいとします。</p>
</dd>
<dt>解決方法:</dt>
<dd>
<p>新しい URL への HTTP リダイレクトを強制し、ブラウザと
ユーザの表示を変更します:</p>
<pre class="prettyprint lang-config">RewriteEngine on
RewriteRule "^<strong>/foo</strong>\.html$" "<strong>bar</strong>.html" [<strong>R</strong>]</pre>
</dd>
<dt>議論</dt>
<dd>
<p>この例では、上記の<a href="#old-to-new-intern">内部</a>の例と
対比して、単純に Redirect ディレクティブを使用できます。
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> は、前の例でクライアントからリダイレクトを
隠すために使用されました:</p>
<pre class="prettyprint lang-config">Redirect "/foo.html" "/bar.html"</pre>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="movehomedirs">リソースの別サーバへの移動 <a title="Permanent link" href="#movehomedirs" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>
<p>リソースが別のサーバに移動した場合、人々がブックマークを
更新する間、旧サーバでも URL がしばらく機能し続けるように
したいとします。</p>
</dd>
<dt>解決方法:</dt>
<dd>
<p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> を使用してこれらの URL を新しいサーバに
リダイレクトできますが、Redirect や RedirectMatch ディレクティブの
使用も検討してください。</p>
<pre class="prettyprint lang-config">#With mod_rewrite
RewriteEngine on
RewriteRule "^/docs/(.+)" "http://new.example.com/docs/$1" [R,L]</pre>
<pre class="prettyprint lang-config">#With RedirectMatch
RedirectMatch "^/docs/(.*)" "http://new.example.com/docs/$1"</pre>
<pre class="prettyprint lang-config">#With Redirect
Redirect "/docs/" "http://new.example.com/docs/"</pre>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="static-to-dynamic">静的から動的へ <a title="Permanent link" href="#static-to-dynamic" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>
<p>静的ページ <code>foo.html</code> を動的バリアント
<code>foo.cgi</code> にシームレスに、つまりブラウザ/ユーザに
気づかれずに変換するにはどうすればよいでしょうか。</p>
</dd>
<dt>解決方法:</dt>
<dd>
<p>URL を CGI スクリプトに書き換え、ハンドラを
<strong>cgi-script</strong> に強制して、CGI プログラムとして
実行されるようにします。
これにより、<code>/~quux/foo.html</code> へのリクエストは
内部的に <code>/~quux/foo.cgi</code> の呼び出しに
つながります。</p>
<pre class="prettyprint lang-config">RewriteEngine on
RewriteBase "/~quux/"
RewriteRule "^foo\.html$" "foo.cgi" [H=<strong>cgi-script</strong>]</pre>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="backward-compatibility">ファイル拡張子変更の後方互換性 <a title="Permanent link" href="#backward-compatibility" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>
<p><code>document.YYYY</code> から <code>document.XXXX</code> への
移行後、例えば <code>.html</code> ファイル群を <code>.php</code>
変換した後に、URL の後方互換性 (仮想的にまだ存在する状態) を
どのように保つことができるでしょうか?</p>
</dd>
<dt>解決方法:</dt>
<dd>
<p>URL は旧拡張子から新拡張子に書き換えられますが、新拡張子の
ターゲットファイルが存在し、かつ旧拡張子の元のファイルが
存在しない場合のみです。それ以外の場合、URL はそのまま
変更されません。</p>
<pre class="prettyprint lang-config"># backward compatibility ruleset for
# rewriting document.html to document.php
# when and only when document.php exists
&lt;Directory "/var/www/htdocs"&gt;
RewriteEngine on
RewriteBase "/var/www/htdocs"
RewriteCond "$1.php" -f
RewriteCond "$1.html" !-f
RewriteRule "^(.*).html$" "$1.php"
&lt;/Directory&gt;</pre>
</dd>
<dt>議論</dt>
<dd>
<p>この例では、<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> のあまり知られていない
機能を利用しています。ルールセットの実行順序を活用しています。
具体的には、<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> は RewriteCond ディレクティブを
評価する前に RewriteRule の左辺を評価します。
そのため、RewriteCond ディレクティブが評価される時点で
$1 はすでに定義されています。これにより、同じベースファイル名を使用して
元のファイル (<code>document.html</code>) とターゲットファイル
(<code>document.php</code>) の存在を確認できます。</p>
<p>このルールセットはディレクトリ単位のコンテキスト
(&lt;Directory&gt; ブロックまたは .htaccess ファイル内) で
使用するよう設計されているため、<code>-f</code> チェックは
正しいディレクトリパスを参照します。作業しているディレクトリベースを
指定するために <code class="directive"><a href="../mod/mod_rewrite.html#rewritebase">RewriteBase</a></code>
ディレクティブを設定する必要があるかもしれません。</p>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="canonicalhost">正規ホスト名 <a title="Permanent link" href="#canonicalhost" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>このルールの目的は、同じサイトに到達するために使用される
可能性のある他のホスト名よりも、特定のホスト名の使用を強制
することです。例えば、<strong>example.com</strong> の代わりに
<strong>www.example.com</strong> の使用を強制したい場合は、
以下のレシピのバリアントを使用できます。</dd>
<dt>解決方法:</dt>
<dd>
<p>最善の方法は <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> をまったく使わず、
非正規のホスト名用のバーチャルホストに配置した <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code> ディレクティブを使用する
ことです。</p>
<pre class="prettyprint lang-config">&lt;VirtualHost *:80&gt;
ServerName undesired.example.com
ServerAlias example.com notthis.example.com
Redirect "/" "http://www.example.com/"
&lt;/VirtualHost&gt;
&lt;VirtualHost *:80&gt;
ServerName www.example.com
&lt;/VirtualHost&gt;</pre>
<p>あるいは、<code class="directive"><a href="../mod/core.html#if">&lt;If&gt;</a></code>
ディレクティブを使用して実現することもできます:
(<strong>2.4 以降</strong>)</p>
<pre class="prettyprint lang-config">&lt;If "%{HTTP_HOST} != 'www.example.com'"&gt;
Redirect "/" "http://www.example.com/"
&lt;/If&gt;</pre>
<p>あるいは、例えばサイトの一部を HTTPS にリダイレクトするには、
以下のようにします:</p>
<pre class="prettyprint lang-config">&lt;If "%{SERVER_PROTOCOL} != 'HTTPS'"&gt;
Redirect "/admin/" "https://www.example.com/admin/"
&lt;/If&gt;</pre>
<p>何らかの理由でまだ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> を使用したい場合 -
例えば、より大きな RewriteRule のセットと組み合わせる必要がある場合 -
以下のレシピのいずれかを使用できます。</p>
<p>ポート 80 以外で実行されているサイトの場合:</p>
<pre class="prettyprint lang-config">RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC]
RewriteCond "%{HTTP_HOST}" "!^$"
RewriteCond "%{SERVER_PORT}" "!^80$"
RewriteRule "^/?(.*)" "http://www.example.com:%{SERVER_PORT}/$1" [L,R,NE]</pre>
<p>ポート 80 で実行されているサイトの場合:</p>
<pre class="prettyprint lang-config">RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC]
RewriteCond "%{HTTP_HOST}" "!^$"
RewriteRule "^/?(.*)" "http://www.example.com/$1" [L,R,NE]</pre>
<p>
すべてのドメイン名に対してこれを汎用的に行いたい場合 -
つまり、<strong>example.com</strong> のすべての可能な値に対して
<strong>example.com</strong><strong>www.example.com</strong>
にリダイレクトしたい場合 - 以下のレシピを使用できます:</p>
<pre class="prettyprint lang-config">RewriteCond "%{HTTP_HOST}" "!^www\." [NC]
RewriteCond "%{HTTP_HOST}" "!^$"
RewriteRule "^/?(.*)" "http://www.%{HTTP_HOST}/$1" [L,R,NE]</pre>
<p>これらのルールセットは、メインサーバ設定ファイルまたはサーバの
<code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> に配置した
<code>.htaccess</code> ファイルのいずれでも動作します。</p>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="multipledirs">複数のディレクトリでのページ検索 <a title="Permanent link" href="#multipledirs" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>
<p>特定のリソースが複数の場所に存在する可能性があり、
リクエスト時にそれらの場所でリソースを検索したいとします。
おそらく最近ディレクトリ構造を再編成し、コンテンツを
複数の場所に分割したためです。</p>
</dd>
<dt>解決方法:</dt>
<dd>
<p>以下のルールセットは 2 つのディレクトリでリソースを検索し、
どちらにも見つからない場合は、リクエストされた場所からそのまま
提供しようとします。</p>
<pre class="prettyprint lang-config">RewriteEngine on
# first try to find it in dir1/...
# ...and if found stop and be happy:
RewriteCond "%{DOCUMENT_ROOT}/<strong>dir1</strong>/%{REQUEST_URI}" -f
RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/<strong>dir1</strong>/$1" [L]
# second try to find it in dir2/...
# ...and if found stop and be happy:
RewriteCond "%{DOCUMENT_ROOT}/<strong>dir2</strong>/%{REQUEST_URI}" -f
RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/<strong>dir2</strong>/$1" [L]
# else go on for other Alias or ScriptAlias directives,
# etc.
RewriteRule "^" "-" [PT]</pre>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="archive-access-multiplexer">地理的に分散されたサーバへのリダイレクト <a title="Permanent link" href="#archive-access-multiplexer" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>
<p>ウェブサイトの多数のミラーがあり、アクセス元の国に最も近い
ミラーにリダイレクトしたいとします。</p>
</dd>
<dt>解決方法:</dt>
<dd>
<p>リクエスト元のクライアントのホスト名を参照して、どの国から
アクセスしているかを判定します。IP アドレスの検索ができない場合は、
デフォルトサーバにフォールバックします。</p>
<p>使用したいサーバのリストを構築するために <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> ディレクティブを
使用します。</p>
<pre class="prettyprint lang-config">HostnameLookups on
RewriteEngine on
RewriteMap multiplex "txt:/path/to/map.mirrors"
RewriteCond "%{REMOTE_HOST}" "([a-z]+)$" [NC]
RewriteRule "^/(.*)$" "${multiplex:<strong>%1</strong>|http://www.example.com/}$1" [R,L]</pre>
<div class="example"><p><code>
## map.mirrors -- マルチプレクシングマップ<br>
<br>
de http://www.example.de/<br>
uk http://www.example.uk/<br>
com http://www.example.com/<br>
##EOF##
</code></p></div>
</dd>
<dt>議論</dt>
<dd>
<div class="warning">このルールセットは
<code class="directive"><a href="../mod/core.html#hostnamelookups">HostNameLookups</a></code>
<code>on</code> に設定されていることに依存しており、
パフォーマンスに大きな影響を与える可能性があります。</div>
<p><code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>
ディレクティブは、リクエスト元のクライアントのホスト名の最後の
部分 (国コード) をキャプチャし、後続の RewriteRule はその値を
使用してマップファイルから適切なミラーホストを検索します。</p>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="canonicalurl">正規 URL <a title="Permanent link" href="#canonicalurl" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>
<p>一部のウェブサーバでは、リソースに対して複数の URL が存在します。
通常、正規の URL (実際に使用および配布される URL) と、単なる
ショートカット、内部用の URL 等があります。ユーザがリクエストで
どの URL を提供したかに関係なく、最終的にブラウザのアドレスバーに
正規の URL が表示されるようにしたいとします。</p>
</dd>
<dt>解決方法:</dt>
<dd>
<p>すべての非正規 URL に対して外部 HTTP リダイレクトを行い、
ブラウザの表示を修正し、以降のすべてのリクエストに反映させます。
以下のルールセット例では、<code>/puppies</code>
<code>/canines</code> を正規の <code>/dogs</code>
置き換えます。</p>
<pre class="prettyprint lang-config">RewriteRule "^/(puppies|canines)/(.*)" "/dogs/$2" [R]</pre>
</dd>
<dt>議論:</dt>
<dd>
これは実際には Redirect または RedirectMatch ディレクティブで
実現すべきです:
<pre class="prettyprint lang-config">RedirectMatch "^/(puppies|canines)/(.*)" "/dogs/$2"</pre>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="moveddocroot"><code>DocumentRoot</code> の移動 <a title="Permanent link" href="#moveddocroot" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>
<p>通常、ウェブサーバの <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
は URL "<code>/</code>" に直接対応します。
しかし、このデータが最優先ではない場合も多くあります。例えば、
訪問者がサイトに最初にアクセスしたときに特定のサブディレクトリ
<code>/about/</code> に移動させたい場合があります。これは以下の
ルールセットで実現できます:</p>
</dd>
<dt>解決方法:</dt>
<dd>
<p>URL <code>/</code><code>/about/</code> にリダイレクトします:
</p>
<pre class="prettyprint lang-config">RewriteEngine on
RewriteRule "^/$" "/about/" [<strong>R</strong>]</pre>
<p>これは <code class="directive"><a href="../mod/mod_alias.html#redirectmatch">RedirectMatch</a></code>
ディレクティブでも処理できることに注意してください:</p>
<pre class="prettyprint lang-config">RedirectMatch "^/$" "http://example.com/about/"</pre>
<p>この例はルート URL のみを書き換えることに注意してください。つまり、
<code>http://example.com/</code> へのリクエストは書き換えますが、
<code>http://example.com/page.html</code> へのリクエストは書き換えません。
実際にドキュメントルートを変更した場合 - つまり、コンテンツの
<strong>すべて</strong>が実際にそのサブディレクトリにある場合 - URL を
書き換えるよりも、単に <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
ディレクティブを変更するか、すべてのコンテンツを 1 つ上のディレクトリに
移動する方がはるかに望ましいです。</p>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="fallback-resource">フォールバックリソース <a title="Permanent link" href="#fallback-resource" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>特定のディレクトリに来るすべてのリクエストを単一のリソース
(例えば特定のファイル、index.php など) で処理したいが、
画像や CSS ファイルなどの既存のリソースへのリクエストは
そのまま処理したいとします。</dd>
<dt>解決方法:</dt>
<dd>
<p>バージョン 2.2.16 以降では、このために <code class="directive"><a href="../mod/mod_dir.html#fallbackresource">FallbackResource</a></code> ディレクティブを
使用してください:</p>
<pre class="prettyprint lang-config">&lt;Directory "/var/www/my_blog"&gt;
FallbackResource index.php
&lt;/Directory&gt;</pre>
<p>ただし、以前のバージョンの Apache や、これよりも複雑なニーズがある
場合は、以下の書き換えセットのバリエーションを使用して同じことを
実現できます:</p>
<pre class="prettyprint lang-config">&lt;Directory "/var/www/my_blog"&gt;
RewriteBase "/my_blog"
RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-f
RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-d
RewriteRule "^" "index.php" [PT]
&lt;/Directory&gt;</pre>
<p>一方、リクエストされた URI をクエリ文字列引数として index.php に
渡したい場合は、その RewriteRule を以下に置き換えることができます:</p>
<pre class="prettyprint lang-config">RewriteRule "(.*)" "index.php?$1" [PT,QSA]</pre>
<p>これらのルールセットは <code>.htaccess</code> ファイルでも
&lt;Directory&gt; ブロックでも使用できることに注意してください。</p>
</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="rewrite-query">クエリ文字列の書き換え <a title="Permanent link" href="#rewrite-query" class="permalink">&para;</a></h2>
<dl>
<dt>説明:</dt>
<dd>クエリ文字列から特定の値をキャプチャし、それを置換するか
URL の別のコンポーネントに組み込みたいとします。</dd>
<dt>解決方法:</dt>
<dd>
<p>このセクションの多くの解決方法は同じ条件を使用し、マッチした値を
%2 バックリファレンスに残します。%1 はクエリ文字列の先頭 (対象キーまで)、
%3 は残りの部分です。この条件は、柔軟性のため、また置換で二重の
'&amp;&amp;' を避けるためにやや複雑です。</p>
<ul>
<li>この方法はマッチするキーと値を削除します:
<pre class="prettyprint lang-config"># Remove mykey=???
RewriteCond "%{QUERY_STRING}" "(.*(?:^|&amp;))mykey=([^&amp;]*)&amp;?(.*)&amp;?$"
RewriteRule "(.*)" "$1?%1%3"</pre>
</li>
<li>この方法はキャプチャした値を URL 置換で使用し、'?' を追加して
元のクエリの残りを破棄します:
<pre class="prettyprint lang-config"># Copy from query string to PATH_INFO
RewriteCond "%{QUERY_STRING}" "(.*(?:^|&amp;))mykey=([^&amp;]*)&amp;?(.*)&amp;?$"
RewriteRule "(.*)" "$1/products/%2/?" [PT]</pre>
</li>
<li>この方法は後続の条件でキャプチャした値を確認します:
<pre class="prettyprint lang-config"># Capture the value of mykey in the query string
RewriteCond "%{QUERY_STRING}" "(.*(?:^|&amp;))mykey=([^&amp;]*)&amp;?(.*)&amp;?$"
RewriteCond "%2" !=not-so-secret-value
RewriteRule "(.*)" "-" [F]</pre>
</li>
<li>この方法は前の方法の逆で、URL からパスコンポーネント
(おそらく PATH_INFO) をクエリ文字列にコピーします:
<pre class="prettyprint lang-config"># The desired URL might be /products/kitchen-sink, and the script expects
# /path?products=kitchen-sink.
RewriteRule "^/?path/([^/]+)/([^/]+)" "/path?$1=$2" [PT]</pre>
</li>
</ul>
</dd>
</dl>
</div></div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../de/rewrite/remapping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="../en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/rewrite/remapping.html" hreflang="es" rel="alternate" title="Espa&ntilde;ol">&nbsp;es&nbsp;</a> |
<a href="../fr/rewrite/remapping.html" hreflang="fr" rel="alternate" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/rewrite/remapping.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/rewrite/remapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/rewrite/remapping.html" hreflang="tr" rel="alternate" title="T&uuml;rk&ccedil;e">&nbsp;tr&nbsp;</a> |
<a href="../zh-cn/rewrite/remapping.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese">&nbsp;zh-cn&nbsp;</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 = '&#9776;';
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>