Apacheで同じオブジェクトに対して場所とディレクトリを使用する理由

Apacheで同じオブジェクトに対して場所とディレクトリを使用する理由

私が理解したApacheディレクティブによると、ファイルDirectory システムオブジェクトを参照すると、LocationリクエストURIの要素が参照されます。もしそうなら、URIがファイルシステムのオブジェクトと一致する場合、ディレクトリと場所が同じ意味で使用されるのはなぜですか?

ScriptAlias /otrs/ "/opt/otrs/bin/cgi-bin/"
Alias /otrs-web/ "/opt/otrs/var/httpd/htdocs/"

<IfModule mod_perl.c>

    # Setup environment and preload modules
    Perlrequire /opt/otrs/scripts/apache2-perl-startup.pl

    # Reload Perl modules when changed on disk
    PerlModule Apache2::Reload
    PerlInitHandler Apache2::Reload

    # general mod_perl2 options
    <Location /otrs>
#        ErrorDocument 403 /otrs/customer.pl
        ErrorDocument 403 /otrs/index.pl
        SetHandler  perl-script
        PerlResponseHandler ModPerl::Registry
        Options +ExecCGI
        PerlOptions +ParseHeaders
        PerlOptions +SetupEnv

        <IfModule mod_version.c>
            <IfVersion < 2.4>
                Order allow,deny
                Allow from all
            </IfVersion>
            <IfVersion >= 2.4>
                Require all granted
            </IfVersion>
        </IfModule>
        <IfModule !mod_version.c>
            Order allow,deny
            Allow from all
        </IfModule>
    </Location>

    # mod_perl2 options for GenericInterface
    <Location /otrs/nph-genericinterface.pl>
        PerlOptions -ParseHeaders
    </Location>

</IfModule>

<Directory "/opt/otrs/bin/cgi-bin/">
<Directory "/opt/otrs/bin/cgi-bin/">
    AllowOverride None
    Options +ExecCGI -Includes

    <IfModule mod_version.c>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </IfModule>
    <IfModule !mod_version.c>
        Order allow,deny
        Allow from all
    </IfModule>

    <IfModule mod_filter.c>
        <IfModule mod_deflate.c>
            AddOutputFilterByType DEFLATE text/html text/javascript application/javascript text/css text/xml application/json text/json
         </IfModule>
    </IfModule>

</Directory>

編集する:

ありがとうございます。これは私が理解した内容ですが、自由に訂正してください。私は間違いから学ぶために来た。  ScriptAlias /otrs/ "/opt/otrs/bin/cgi-bin/" CGI プログラムの宛先ディレクトリを指定します。

/opt/otrs/bin/cgi-bin/には次のものがあります。

drwxrwsr-x 4 otrs apache  205 Nov 13 16:39 ..
drwxrwsr-x 2 otrs apache  139 Oct 22 09:27 .
-rwxrwx--- 1 otrs apache 3.4K Sep 28 01:40 app.psgi
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 customer.pl
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 index.pl
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 installer.pl
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 nph-genericinterface.pl
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 public.pl
-rwxrwx--- 1 otrs apache 7.2K Sep 28 01:40 rpc.pl

だから私が電話したら理解してくれhttps://ipv4/otrs/index.pl/opt/otrs/bin/cgi-bin/ の下にある特定のスクリプトをトリガーします。

したがって、このセクションでは、「/opt/otrs/bin/cgi-bin/」の下のすべてのスクリプトにオプションが適用されます <Location /otrs> </Location>。私が訪れるならhttps://ipv4/otrs/nph-genericinterface.pl このセクションのオプションは、<Location /otrs> </Location>次に設定したオプションとマージされます。 <Location /otrs/nph-genericinterface.pl> </Location>

しかし、以下でも同じように定義しました。<Directory "/opt/otrs/bin/cgi-bin/">

その理由は何ですか?これら2つのガイドラインがまったく同じものを参照していませんか?

答え1

Directory仕様はファイルFilesシステムにのみ適用されます。通常、いくつかのディレクトリツリーにのみアクセスできます。特定のファイルへのアクセスは.htaccess通常禁止されており、一部のサイトではDirectory仕様Fileが十分であり、Location仕様は不要です。これらの仕様は通常、アクセス可能なディレクトリを制御するために使用されます。

Location仕様は、ネットワーク空間(ファイルシステムに存在しないコンテンツを含めることができる)に適用されます。これはウェブサイトのデザインとより一貫しており、ディレクトリパスを考慮する必要はありません。これらのオプションは通常、特定のパスでコンテンツを処理する方法を指定します。

適用する仕様を制御する優先順位と順序規則があります。両方Locationのブロックの順序が重要です。

ハンドラなどの設定はperl-script複数の場所で実行できます。これを設定する場所を選択するには、部分的にPerl CGIコンテンツに配信するサイトの量を理解する必要があります。通常、アクセスを制限する方が安全です。Locationディレクティブは(許可されている場合)ディレクティブをオーバーライドするため、Directory最小限のアクセスを提供します。別のURLパスを介してディレクトリにアクセスできる場合、これらのディレクティブLocationは適用されません。

元の応答:場所とディレクトリが同じ場所を指すのは一般的ではありません。通常、サイトのルートは、/var/wwwまたは同様のディレクトリです。あなたの場合は/opt

の場合、otrsディレクトリ指定はで、/opt/otrs/bin/cgi-bin位置指定はです/otrs。 "ortr-web"の場合、ディレクトリ仕様は/opt/otrs/var/httpd/htdocsで、場所はです/otrs-web

Apache設定を検索すると、「/」ディレクトリへのアクセスが拒否され、サイトルートへのアクセスが許可されることがわかります。通常、ファイルシステムへのアクセスは仕様によって制御されDirectory、URLパスへのアクセスはLocation仕様によって制御されます。エイリアスの指定は禁止されています。 Location指定は、のようにディスクに存在しない仮想場所を指定できます。DocrootLocation/server-status/server-info

関連情報