2017-03-06 15 views
1

この質問はすでに以前に尋ねられたかもしれませんが、検索方法はわかりませんでした。私はに.htaccessファイルに記述する必要が何.htaccessを使ってウェブサイトのルート以外のコンテンツにアクセスする

/ 
/A (website root) 
/B/archive/page.html 

:ドメインのフォルダに表示され

www.mydomain.com/archive/page.html 

は、アーカイブのサブフォルダは、フォルダBにあります。だから私はこのようなURLを持っています上記のURLを使用できますか?

これは、古いサイトのページをBに入れずに新しいWebサイトをインストールし、新しいWebサイトフォルダに保存する必要があることを目標にしています。

答えて

1

シナリオ1

ABは、同じWebルート下にない場合は、aliasを使用し、ターゲット・ディレクトリのディレクトリ・ブロックを定義する必要があります。これは、.htaccessファイルで行うことはできませんが、サーバーやバーチャルホストの構成で設定することができます。

Alias "/archive" "/path/to/B/archive" 
<Directory "/path/to/B/archive"> 
    Require all granted 
</Directory> 

OptionsAllowOverrideディレクティブは、必要に応じて追加する必要があります。

シナリオ2

ABは、ウェブルート/の下のサブディレクトリである場合、以下の.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が得られます。

+0

ありがとうございました!私の場合、シナリオ1が適切です。 '/ archive'がフォルダではなくファイルであればどうなるでしょうか?だから'page.html'はBのルートにありますが、' mydomain.com/page.html'でアクセスする必要がありますか? – 0711master

+0

'/ archive'接頭辞なしでアクセスしたい' B'の下にファイルがありますか?その場合、ファイルが1つか2つだけの場合は、それぞれに 'RewriteRule^/?page¥.html $ /B/page.html [L]'のようなルールを追加できます。あなたがそれをしたいたくさんのファイルがあるなら、それは退屈になるでしょう。あなたは同じ拡張子、または同じファイル接頭辞を持つファイルの束をリダイレクトしようとしていますか?その場合、正規表現マッチングが役立つでしょう。 – AfroThundr

+0

これはちょうど約15のhtmlとphpファイルなので、あまり努力していません...しかし、あなたが書いたルールは、AとBが同じWebルートの下にある場合、私の場合... – 0711master

関連する問題