web-dev-qa-db-ja.com

複数のサイト間に複数の.htaccessファイルがある場合、アクティブなサイトはどれですか?

同じISPでホストされているサイトが4つあります。サイトは何度も変更され、現在、いくつかの。htaccessファイルがあります。そのうちの1つはメインルートにあります。他の場所はさまざまな場所に広がっています。たとえば、すべてのURLのルートにも表示されます。

それをよりよく説明するために、1つのサイトAと2番目のBを呼び出します。したがって、。htaccessファイルがあります。

  • ルート(.htaccessを使用)
    • + public.html内の独自の.htaccess。
    • B + public.html内の独自の.htaccess。

これらのファイルは、ルートまたはpublic.htmlでonlyでなければならないことを前提としています。私は正しいですか?

2
Petrutech

単一の「アクティブな」.htaccessファイルはありません-それよりも少し複雑です。サーバーがどのように構成されているか、またはこれらの.htaccessファイルに実際に何が含まれているかを知らなくても、それらがすべて「アクティブ」であると想定することができます。それらはすべて一緒に動作します。

.htaccessファイルはApache ディレクトリごと構成ファイルです。 .htaccessファイルがあるディレクトリと、その下のディレクトリツリー全体に影響します。サーバーの許可により、ファイルシステムパス(URLのマッピング先)に沿ったすべての.htaccessファイルが処理され、親ディレクトリから始まり、サブディレクトリにドリルダウンされます。したがって、あなたの例では、「ルート」の.htaccessファイルは、Aの.htaccessディレクトリ内のpublic_htmlファイルの前に処理されます-Aのpublic_htmlディレクトリの下のファイルが要求された。

ただし、構成ファイル間で異なるモジュールが個別に処理されます。これは、単一の.htaccessファイル内でディレクティブが表示される順序とは限りません。また、ディレクティブが親/子.htaccessファイル間でどのように「継承」されるかはモジュールに依存します(特にmod_rewriteはこの点に関して独自のルールを持っています)。

これらのファイルはpublic.htmlのルートにのみ存在する必要があると思います。私は正しいですか?

これは理想的です。メンテナンスが容易です。ただし、前述のように、それらはどこでも発生する可能性があります。何をしているのかにもよりますが、ルートの共通の.htaccessファイルにすべてのディレクティブを含めることは望ましくありません。しかし、ディレクティブをファイルシステム全体にarbitrarily意的に分散させることもできません。

サーバー構成にアクセスできる場合、すべての.htaccessファイルを単一の構成(<VirtualHost>コンテナー内)に統合することができます。おそらく、その中に複数の<Directory>コンテナーがあります。

1
MrWhite

いいえ、.htaccessファイルはサイトのどこにでも置くことができます。

。htaccessファイル(または「分散構成ファイル」)は、ディレクトリごとに構成変更を行う方法を提供します。 1つまたは複数の構成ディレクティブを含むファイルが特定のドキュメントディレクトリに配置され、ディレクティブがそのディレクトリとそのすべてのサブディレクトリに適用されます。 (私の強調)

https://httpd.Apache.org/docs/current/howto/htaccess.html

0
Steve

私はスティーブに同意します、彼が指摘したことは正しいです。 .htaccessファイルは、配置されるディレクトリに影響を与えます。サブディレクトリに追加の.htaccessがある場合、サブディレクトリ内のファイルは、同じディレクトリ内ではなく、同じディレクトリ内の.htaccessファイルを継承すると述べました。親ディレクトリ。

スティーブの答えで述べたように

.htaccessファイル(または「分散構成ファイル」)は、ディレクトリごとに構成を変更する方法を提供します。 1つ以上の構成ディレクティブを含むファイルは特定のドキュメントディレクトリに配置され、ディレクティブはそのディレクトリとそのすべてのサブディレクトリに適用されます。

だからあなたの質問に答えるためにあなたの例をそのまま取って


- Root // .htaccess in root will impact all files and sub-directories 
  |
  |-- A
    |- .htaccess // Since A has its .htaccess all files and sub-directories in A will inherit from this .htaccess file
  |  
  |-- B  // If B does not have .htaccess it will inherit from the Root directory which has one.

お役に立てれば !!

0
Manik