>

YouTube는 폴더를 동적으로 만드는 방법은 무엇입니까? 예를 들어 루트 디렉토리에서 다음과 같은 사람들의 채널에 액세스 할 수 있습니다.

http://youtube.com/PewDiePie

각 채널에 대해 새 폴더를 만드는 것은 그 방법이 아니라는 것과 명백히 다음과 같은 링크가 있습니다 :

http://youtube.com/PewDiePie/about

이것은 htaccess, Apache에서 이루어 졌습니까, 아니면 PHP에서 StackOverflow에서 물어봐야 할 것이 있습니까?

  • 답변 # 1

    URL 재 작성이라고합니다. Apache에서 RewriteEngine을 사용하거나 Apache의 구성에서 직접 또는 .htaccess를 사용하여 Apache에서 수행 할 수 있습니다 (실제 차이는 없습니다). 그리고 다른 많은 웹 서버에서도 그렇게 할 수 있습니다 (성능과 구성 용이성 때문에 nginx를 좋아합니다).

    URL을 다시 쓰면 URL의 동적 부분 (예를 들어,/다음과 앞뒤에있는 것이 동적 부분 중 하나임)을 서버 측에 전달 된 변수에 할당합니다 언어 (PHP, JSP 일 수 있음)는 중요하지 않습니다. 그런 다음 서버 측 언어에서 이는 일반 GET 매개 변수이며, 데이터베이스에서 관련 데이터를 읽는 등의 처리가 가능합니다.

    예를 들어 다음과 같이 다시 작성하십시오.

    ^(.*)/(.*)$ /controller.php?user=$1&page=$2
    
    

    그런 다음 PHP에서 코드 :

    echo $_GET['user'];
    
    

    인쇄 할 것 :

    PewDiePie
    
    

  • 답변 # 2

    이것은 실제로 시스템의 실제 디렉토리가 아닙니다. URL 네임 스페이스 내의 동적 이름으로 실제 디렉토리에 매핑되거나 함수 또는 응용 프로그램에 대한 인수로 해석되어 작동합니다.

    이 "마법"을 용이하게하는 것은 일반적으로 URL 재 작성입니다. URL 재 작성에 대한 소개라는 제목이 궁금한 경우 smashingmagazine에서이 자습서를 살펴보십시오.

    위키 백과라고 가정하십시오. 전체 사이트는 주로 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]
    
    

    브라우저가 "http://en.wikipedia.org/wiki/Barack_obama"에 액세스하고있는 URL을 웹 서버 (Apache) 내부에 "http : //en.wikipedia"로 다시 씁니다. org/w/index.php? title = Barack_obama ".

    저는 이것을 보편적 번역가가있는 스타 트렉 (Star Trek)과 비슷하다고 생각합니다. 서버는 입력에서 (브라우저에서) 하나의 URL 집합을 가져오고 뒷면은 해당 URL을 서버 또는 다른 서버의 실제 응용 프로그램 및 스크립트에 매핑되는 다른 URL로 변환합니다.

  • 답변 # 3

    / 가없는 모든 URL을 단순히 리디렉션하려면  그 안에는 간단한 AliasMatch (mod_alias의)를 사용할 수 있습니다 :

    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 를 처리하는 방법이있을 것입니다  그리고 /username/something  하나의 규칙에서, 그러나 그것은 아마도 꽤 읽을 수 없게 될 것입니다. 그들은 domain.com 후 모든 것을 일치시키지 않기 위해이 방식으로 수행됩니다. .

    스크립트에 대한 인수로 경로를 변경해야하는 경우 RewriteRule 의 땅에 있습니다.  (mod_rewrite에서). 위치 표시 줄에서 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 를 처리해야하는 스크립트가 저장됩니다. $_GET['user'] 에서 변수를 가져올 수 있습니다  그리고 $GET['args']  PHP를 사용하는 경우.

    다시 AliasMatch 처럼  두 번째 규칙은 다음과 같습니다.

    RewriteRule ^/([^/]+)/([^/]+) /path/to/handler.php?user=$1&args=$2 [LP]
    
    

    하지만이 두 가지 모두에 대해 스크립트는 두 URL과 일치하는 모든 것을 처리하는 방법을 알아야합니다. 다음과 같은 URL에 원하는 것이 아닐 수도 있습니다.

    /errors/404.html
     /about/google.html
    
    

    등.

  • 이전 apache httpd - htpasswd의 암호화 알고리즘을 어떻게 구별 할 수 있습니까?
  • 다음 apache httpd - 파일에 기록되는 PHP 프로세스 찾기