![Apache - 동적 하위 폴더](https://linux55.com/image/45702/Apache%20-%20%EB%8F%99%EC%A0%81%20%ED%95%98%EC%9C%84%20%ED%8F%B4%EB%8D%94.png)
YouTube에서 폴더를 동적으로 만드는 방법은 무엇입니까? 예를 들어 다음과 같이 루트 디렉터리의 사용자 채널에 액세스할 수 있습니다.
각 채널에 대해 새 폴더를 만드는 것은 분명히 그들의 접근 방식이 아니며 다음 링크도 있습니다.
이 작업은 htaccess, Apache를 사용하여 수행됩니까, 아니면 PHP를 사용하여 수행됩니까? StackOverflow에 문의해야 합니까?
답변1
이를 URL 재작성이라고 합니다. Apache 구성에서 직접 RewriteEngine을 사용하거나 .htaccess를 사용하여 Apache에서 이 작업을 수행할 수 있습니다(실제로 차이는 없습니다). 다른 많은 웹 서버에서 이 작업을 수행할 수 있습니다(저는 성능과 구성 용이성 때문에 nginx를 좋아합니다).
URL을 다시 작성할 때 URL의 동적 부분(예에서는 / 뒤와 두 번째 / 앞의 모든 항목이 동적 부분 중 하나임)을 일부 서버 측 언어로 전달되는 변수에 할당합니다. PHP를 사용하든 JSP를 사용하든 상관없습니다). 그런 다음 서버 측 언어에서 이는 일반 GET 매개변수이며 이를 조작할 수 있습니다. 데이터베이스에서 관련 데이터를 읽는 등의 작업을 할 수 있습니다.
예를 들어 다음과 같이 다시 작성합니다.
^(.*)/(.*)$ /controller.php?user=$1&page=$2
그런 다음 PHP에서 코드는 다음과 같습니다.
echo $_GET['user'];
다음을 인쇄합니다:
PewDiePie
답변2
이는 시스템의 실제 물리적 디렉터리가 아닙니다. 이는 물리적 디렉토리에 매핑되거나 함수 또는 애플리케이션에 대한 매개변수로 해석되어 조작될 수 있는 URL 네임스페이스의 동적 이름입니다.
이러한 "마법"을 촉진하는 것은 종종 URL 재작성입니다. 정말 궁금하다면 scraping 매거진의 다음 튜토리얼을 살펴보세요.URL 재작성 소개.
예
당신이 위키피디아라고 상상해 보세요. 전체 웹사이트는 주로 PHP를 기반으로 하므로 실제 URL은 다음과 같습니다.
http://en.wikipedia.org/w/index.php?title=Barack_obama
그런데 홈페이지에 접속하시면 아래와 같은 페이지를 보실 수 있습니다.
http://en.wikipedia.org/wiki/Barack_obama
이를 달성하기 위한 Apache 구성:
RewriteEngine On
#Look for the word "wiki" followed by a slash, and then the article title
RewriteRule ^wiki/(.+)$ w/index.php?title=$1 [L]
이를 위해서는 브라우저가 액세스하는 URL이 필요합니다."http://en.wikipedia.org/wiki/Barack_obama"그리고 웹 서버(Apache) 내부에서 다시 작성하세요."http://en.wikipedia.org/w/index.php?title=Barack_obama".
나는 종종 이것이 스타트렉의 만능번역기와 비슷하다고 생각한다. 서버는 입력 시 브라우저에서 일련의 URL을 취하고 백엔드에서는 이러한 URL을 서버 또는 다른 서버의 실제 애플리케이션 및 스크립트에 매핑되는 다른 URL로 변환합니다.
답변3
없이 모두 리디렉션하려면 /
간단한 AliasMatch를 사용하여 다음을 달성할 수 있습니다.모듈 별칭):
AliasMatch ^/([^/]+) /path/to/handler.php
REQUEST_URI
그런 다음 스크립트에서 환경 변수를 확인하여 표시할 사용자를 처리할 수 있습니다 .
/about
그런 다음 처리 와 같은 추가 작업이 있습니다 .
AliasMatch ^/([^/]+)/(about|videos|blah) /path/to/handler.php
/x/y/z
또는 위의 사용자 부분( [^/]+
슬래시가 아닌 하나 이상의 문자) 과 일치한 것처럼 두 수준만 일치하도록 할 수 있습니다( 유사한 경로는 처리되지 않음).
AliasMatch ^/([^/]+)/([^/]+) /path/to/handler.php
REQUEST_URI
표시할 내용을 결정 하려면 다시 사용하세요 .
이렇게 하면 페이지 URL이 "있는 그대로" 제공되지만(브라우저 주소 표시줄의 URL은 동일하게 유지됨) 콘텐츠는 /path/to/handler.php
.
이는 두 가지 별도의 규칙입니다. /username
and 를 하나의 규칙으로 처리하는 방법이 있을 수 있지만 /username/something
결국 읽기가 매우 어려울 수 있습니다. 이후에 오는 모든 항목과 일치하는 것을 피하기 위해 이러한 방식으로 수행됩니다 domain.com
.
스크립트의 매개변수에 대한 경로를 변경해야 하는 경우 다음 위치에 있습니다 RewriteRule
.모드 재작성). 주소 표시줄에 URL을 유지하려면 역방향 프록시 쿼리를 수행해야 합니다.
RewriteEngine On
RewriteRule ^/([^/]+) /path/to/handler.php?user=$1 [LP]
RewriteRule ^/([^/]+)/(about|videos|blah) /path/to/handler.php?user=$1&args=$2 [LP]
이렇게 하면 스크립트 처리 시간이 절약되고 REQUEST_URI
PHP에서 변수를 추출할 수 있습니다.$_GET['user']
$GET['args']
마찬가지로 AliasMatch
두 번째 규칙은 다음과 같습니다.
RewriteRule ^/([^/]+)/([^/]+) /path/to/handler.php?user=$1&args=$2 [LP]
그러나 스크립트는 두 URL과 일치하는 모든 항목에 대해 무엇을 해야 하는지 알아야 합니다. 다음 URL에는 원하는 내용이 아닐 수 있습니다.
/errors/404.html
/about/google.html
등.