복붙노트

.htaccess로 하위 도메인을 즉석에서 만듭니다 (PHP).

PHP

.htaccess로 하위 도메인을 즉석에서 만듭니다 (PHP).

가입시 사용자 계정 영역에 대한 내 웹 사이트에 하위 도메인을 만드는 시스템을 만들려고합니다.

e. 예원

.htaccess 파일과 관련이 있으며 웹 사이트의 다른 위치로 리디렉션 될 수 있다고 생각합니다. 나는 실제로 모른다. 그러나 나를 시작하는 정보는 크게 감사 할 것입니다.

가입 영역을 만드는 것은 문제가되지 않습니다 - 나는 이것을 여러 번 해왔습니다. 하위 도메인으로 시작할 위치가 확실하지 않습니다.

해결법

  1. ==============================

    1.DNS 설정에서 * .example.org와 같은 와일드 카드 도메인 항목을 만들어야합니다. 와일드 카드 항목은 다음과 같습니다.

    DNS 설정에서 * .example.org와 같은 와일드 카드 도메인 항목을 만들어야합니다. 와일드 카드 항목은 다음과 같습니다.

    *.example.org.   3600  A  127.0.0.1
    

    다음으로 Apache 구성에서 ServerAlias ​​DOCs 지시문에 와일드 카드를 지정하는 vhost 컨테이너를 설정해야합니다. vhost 컨테이너의 예 :

    <VirtualHost *:80>
      ServerName server.example.org
      ServerAlias *.example.org
      UseCanonicalName Off
    </VirtualHost>
    

    그런 다음 PHP 스크립트에서 $ _SERVER 수퍼 전역 변수를보고 도메인을 찾을 수 있습니다. 다음은 PHP에서 하위 도메인을 가져 오는 예제입니다.

    preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
    if(isset($matches[1])) {
        $subdomain = $matches[1];
    }
    

    www.subdomain.example.org 또는 subdomain.example.org를 통해 사이트를 방문하는 사람들을 허용하기 위해 여기 정규식을 사용했습니다.

    www를 다룰 생각이 없다면. (또는 다른 하위 도메인) 다음과 같이 하위 문자열을 간단히 사용할 수 있습니다.

    $subdomain = substr(
                     $_SERVER['SERVER_NAME'], 0,
                     strpos($_SERVER['SERVER_NAME'], '.')
                 );
    

    대용량 가상 호스팅은 질문을 제안 할 때 응용 프로그램을 사용하려고 시도하는 대신 많은 웹 사이트를 호스팅하기 위해 일반적으로이 도구를 사용한다는 점에서 위와 약간 다른 방식입니다.

    내 mod_rewrite 기반의 대량 가상 호스팅 환경을 내 블로그에 게시하기 전에 문서화했습니다.이 환경은 원하는 경로인지 확인할 수 있습니다. 물론 각각의 Apache 매뉴얼 페이지도있다.

    아파치는 또한 내가 사용했던 mod_rewrite 메소드보다 유연하지 않은 대량 가상 호스팅을 다루는 내부 방법을 가지고있다. 이것은 모두 Apache Dynamic Configured Mass Virtual Hosting 매뉴얼 페이지에 설명되어 있습니다.

  2. ==============================

    2.모든 하위 도메인을 허용하고 하위 도메인이 유효한지 확인할 수 있습니다. 예 :

    모든 하위 도메인을 허용하고 하위 도메인이 유효한지 확인할 수 있습니다. 예 :

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
    RewriteRule !^index\.php$ index.php [L]
    

    index.php에서 다음을 사용하여 하위 도메인을 추출 할 수 있습니다.

    if (preg_match('/^([^.]+)\.example\.com$/', $_SERVER['HTTP_HOST'], $match)) {
        var_dump($match[1]);
    }
    

    그러나이 모든 것은 귀하의 웹 서버가 모든 하위 도메인 이름을 받아 들일 것을 요구합니다.

  3. ==============================

    3.DNS 와일드 카드를 설정하는 것 외에도 과거에 이것을 해결 한 방법 인 Apache 용 Dynamic Mass Virtual Hosting을 살펴볼 수 있습니다

    DNS 와일드 카드를 설정하는 것 외에도 과거에 이것을 해결 한 방법 인 Apache 용 Dynamic Mass Virtual Hosting을 살펴볼 수 있습니다

  4. ==============================

    4.가장 쉬운 방법은 / wwwroot를 가리 키도록 모든 하위 도메인 (와일드 카드 * 사용)을 리디렉션하는 것입니다. 그런 다음 .htaccess를 다음 코드로이 폴더에 넣습니다.

    가장 쉬운 방법은 / wwwroot를 가리 키도록 모든 하위 도메인 (와일드 카드 * 사용)을 리디렉션하는 것입니다. 그런 다음 .htaccess를 다음 코드로이 폴더에 넣습니다.

    RewriteCond %{ENV:REDIRECT_SUBDOMAIN} ="" 
    RewriteCond %{HTTP_HOST} ^([a-z0-9][-a-z0-9]+)\.domain\.com\.?(:80)?$ [NC] 
    RewriteCond %{DOCUMENT_ROOT}/%1 -d 
    RewriteRule ^(.*) %1/$1 [E=SUBDOMAIN:%1,L] 
    RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN},L]
    

    이렇게하면 / wwwroot 폴더의 모든 하위 폴더가 하위 도메인 (foldername.domain.com)을 통해 허용됩니다.

    이 년 전에 발견 된 http://www.webmasterworld.com/apache/3163397.htm

  5. ==============================

    5.나는 PHP로 더 쉽게 그것을 발견했다. 사실 cPanel에서 하위 도메인을 만들고 원하는 도메인 이름 아래에 폴더를 만듭니다. cPanel에서 수동으로 할 것이지만 모든 것이 간단한 PHP 함수로 밀리 초 단위로 완료됩니다. 클릭 필요 없음 :)

    나는 PHP로 더 쉽게 그것을 발견했다. 사실 cPanel에서 하위 도메인을 만들고 원하는 도메인 이름 아래에 폴더를 만듭니다. cPanel에서 수동으로 할 것이지만 모든 것이 간단한 PHP 함수로 밀리 초 단위로 완료됩니다. 클릭 필요 없음 :)

    function create_subdomain($subDomain,$cPanelUser,$cPanelPass,$rootDomain) {
    
        //  $buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain;
    
        $buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain . "&dir=public_html/subdomains/" . $subDomain;
    
        $openSocket = fsockopen('localhost',2082);
        if(!$openSocket) {
            return "Socket error";
            exit();
        }
    
        $authString = $cPanelUser . ":" . $cPanelPass;
        $authPass = base64_encode($authString);
        $buildHeaders  = "GET " . $buildRequest ."\r\n";
        $buildHeaders .= "HTTP/1.0\r\n";
        $buildHeaders .= "Host:localhost\r\n";
        $buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
        $buildHeaders .= "\r\n";
    
        fputs($openSocket, $buildHeaders);
            while(!feof($openSocket)) {
               fgets($openSocket,128);
            }
        fclose($openSocket);
    
        $newDomain = "http://" . $subDomain . "." . $rootDomain . "/";
    
       //  return "Created subdomain $newDomain";
    
    }
    
  6. ==============================

    6..htaccess와는 아무런 관련이 없습니다. 하위 도메인에 대한 DNS 레코드 및 가상 호스팅을 설정해야합니다.

    .htaccess와는 아무런 관련이 없습니다. 하위 도메인에 대한 DNS 레코드 및 가상 호스팅을 설정해야합니다.

  7. ==============================

    7.Mod_vhost_alias가이를 수행하는 데 적합한 모듈입니다.

    Mod_vhost_alias가이를 수행하는 데 적합한 모듈입니다.

    한 줄로 아파치에게 디렉토리 해싱과 같은 적절한 장소를 보라고 말할 수있다. 예를 들어, 줄 :

    VirtualDocumentRoot /http/users/%3.1/%3.2/%3
    

    subdomain.yourdomain.com에 대한 요청이있을 때 Apache가 문서 루트를 / http / users / s / u / subdomain으로 설정하도록합니다.

  8. ==============================

    8.나는 Apache의 Dynamic Mass Virtual Hosting을 사용하는 와일드 카드 DNS도 합리적인 해결책이라고 생각합니다. , 나는 결코 그것을 시도하지 않았다.

    나는 Apache의 Dynamic Mass Virtual Hosting을 사용하는 와일드 카드 DNS도 합리적인 해결책이라고 생각합니다. , 나는 결코 그것을 시도하지 않았다.

    여러 서버로 확장해야하거나 다른 솔루션이 작동하지 않는 경우 데이터베이스 기반 DNS 서버를 사용하는 것이 좋습니다. 나는 과거에 MyDNS를 성공적으로 사용했다. MySQL (또는 PostgreSQL)을 사용하기 때문에 PHP 또는 다른 어떤 것으로도 즉시 DNS를 업데이트 할 수 있습니다. 코드는 잠시 후에 업데이트 된 것처럼 보이지는 않지만 DNS이므로 정확하게 최첨단이 아닙니다.

  9. ==============================

    9.먼저 서버 DNS 편집기를 사용하여 DNS 설정을 만들어야합니다.

    먼저 서버 DNS 편집기를 사용하여 DNS 설정을 만들어야합니다.

    htaccess를 사용하여 매개 변수로 데이터를 전달하는 데 관심이 없다면 다음 코드를 사용하여 데이터를 가져올 수도 있습니다.

    define("SUBDOMAIN_PARENT","domainname.tld");   
    class getData
        {
             function __construct()
            {
                $this->data="";
                $http_host=$_SERVER['HTTP_HOST'];
             $subdom_data= str_replace(SUBDOMAIN_PARENT,"",$http_host);
             $expl_subdom_data=explode(".",$subdom_data);
          $expl_subdom_data=array_filter($expl_subdom_data);
    
                if($expl_subdom_data!=NULL)
                {
               $this->data=end($expl_subdom_data);
                }
           }
        }
    $GLOBALS['get_data']=new getData();
    

    global $ get_data와 같은 곳에서 전역 변수를 사용하십시오.

    echo $get_data->data; //example
    

    (참고 :이 클래스는 주로 http_host에서 정확한 하위 도메인 이름을 가져 오는 데 사용됩니다. 하위 도메인 앞에 결합 된 일부 추가 이름은 www.example.domainname.tld처럼 적용될 수 있기 때문에이 반환 $ _GET [ 'data'] = 'wwww' 인덱스 페이지에서 $ _SERVER [ 'query_string'] 또는 전달 된 htaccess 매개 변수를 사용하는 대신 정확한 값을 얻기 위해 $ _SERVER [ 'http_host']를 사용하는 것이 좋습니다.

    이 와일드 카드 하위 도메인의 실행 속도를 TTL - DNS 설정에서 N 초로 늘립니다.

    7. => http : //abc.domain.tld와 같이 주어진 시간 (600 ~ 10 분) 후에 하위 도메인을 확인하십시오.

    (참고 : 와일드 카드 하위 도메인은 존재하는 하위 도메인을 덮어 쓰지 않습니다. 항상 존재하는 하위 도메인의 최우선 순위이므로)

  10. from https://stackoverflow.com/questions/586129/create-subdomains-on-the-fly-with-htaccess-php by cc-by-sa and MIT license