シナリオ1
A
とB
は、同じWebルート下にない場合は、aliasを使用し、ターゲット・ディレクトリのディレクトリ・ブロックを定義する必要があります。これは、.htaccessファイルで行うことはできませんが、サーバーやバーチャルホストの構成で設定することができます。
Alias "/archive" "/path/to/B/archive"
<Directory "/path/to/B/archive">
Require all granted
</Directory>
Options
とAllowOverride
ディレクティブは、必要に応じて追加する必要があります。
シナリオ2
A
とB
は、ウェブルート/
の下のサブディレクトリである場合、以下の.htaccessエントリは動作するはずです:
も任意のクエリ文字列を通過しなければならない
RewriteEngine on
RewriteRule ^/?archive(/.*)?$ %{DOCUMENT_ROOT}/B/archive$1 [PT,L]
URLに
を追加しました:シナリオ3
あなたは/B/
の下にあるファイルへの書き換えを可能にしながら/B/archive
にマッピングする/archive
が必要な場合は、以下の構成が動作するはずです。
まず、我々はそれがアクセスルールを書き換えすること、Webルートに/B
をマップするエイリアスを作成します。
Alias "/B" "/path/to/B"
<Directory "/path/to/B">
Require all granted
</Directory>
はその後、我々は/archive
/B/archive
に
RewriteEngine on
RewriteRule ^/?archive(/.*)?$ %{DOCUMENT_ROOT}/B/archive$1 [PT,L]
をマッピングするために、次の書き換えルールを使用します/B
から/
にマップする他のファイル(/B/page.html
は/page.html
となります)は、次のようなルールを追加することで実行できます:
RewriteRule ^/?page\.html$ /B/page.html [L]
これは、目的の効果を得るために、シナリオ1と2を結び付けています。
を追加しました:シナリオ4
これはちょうど私に起こった、しかし、あなたがしたいファイルが/B
から提供場合は、すでにあなただけ/A
内のファイルではないため、すべての要求をマップすることができ、ルートフォルダ/A
に存在しません。代わりに/B
へ:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/B/
RewriteCond %(DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %(DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^.*$ /B%{REQUEST_URI} [PT,L]
これは、基本的には次のん:
- のチェックが要求は、すでに要求がファイルまたはディレクトリ
- と一致
/B
で開始する要求を書き換え、それが が存在する場合、そのリソースを提供していませんので
- のチェックをループを防ぐために
/B
で始まっていないこと
これは/archive
ケースも処理します。シナリオ3のエイリアスが必要です。また、要求されたリソースが/A
または/B
に存在しない場合でも、404
が得られます。
ありがとうございました!私の場合、シナリオ1が適切です。 '/ archive'がフォルダではなくファイルであればどうなるでしょうか?だから'page.html'はBのルートにありますが、' mydomain.com/page.html'でアクセスする必要がありますか? – 0711master
'/ archive'接頭辞なしでアクセスしたい' B'の下にファイルがありますか?その場合、ファイルが1つか2つだけの場合は、それぞれに 'RewriteRule^/?page¥.html $ /B/page.html [L]'のようなルールを追加できます。あなたがそれをしたいたくさんのファイルがあるなら、それは退屈になるでしょう。あなたは同じ拡張子、または同じファイル接頭辞を持つファイルの束をリダイレクトしようとしていますか?その場合、正規表現マッチングが役立つでしょう。 – AfroThundr
これはちょうど約15のhtmlとphpファイルなので、あまり努力していません...しかし、あなたが書いたルールは、AとBが同じWebルートの下にある場合、私の場合... – 0711master