내가 이해한 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/">
그 이유는 무엇입니까? 이 두 지침이 정확히 같은 것을 참조하지 않습니까?
답변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