私が理解した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
指定は、のようにディスクに存在しない仮想場所を指定できます。Docroot
Location
/server-status
/server-info