PHP가 각 사용자에 대해 자동으로 하위 도메인을 생성하도록 하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/183928

  •  06-07-2019
  •  | 
  •  

문제

다음과 같은 하위 도메인을 어떻게 만들 수 있나요? http://user.mywebsite.com ?어떻게든 htaccess에 액세스해야 합니까?실제로 순수 PHP 코드를 통해 간단히 생성할 수 있습니까? 아니면 외부 스크립트 서버측 언어를 사용해야 합니까?

답변해주신 분들께:그렇다면 호스팅 업체에서 일종의 DNS 액세스를 제공하는지 물어봐야 할까요??

도움이 되었습니까?

해결책

당신은 관습을 만들려고합니다 기록.

나는 당신이 다음과 같은 일을 할 수있는 레코드를 지정할 때 와일드 카드를 사용할 수 있다고 확신합니다.

*.mywebsite.com       IN  A       127.0.0.1

127.0.0.1은 웹 서버의 IP 주소입니다. 실제로 레코드를 추가하는 방법은 호스트에 따라 다릅니다.


좋아하는 것 같아요 http://mywebsite.com/user 옵션 인 경우 설정하기가 훨씬 쉽습니다.

그런 다음 다음과 같이 보이는 .htaccess 파일을 추가 할 수 있습니다.

Options +FollowSymLinks

RewriteEngine On
RewriteRule ^([aA-zZ])$  dostuff.php?username=$1

위의 내용은 문자 AZ로 제한됩니다.


하위 도메인을 잡기위한 재 작성 규칙은 다음과 같습니다.

RewriteCond %{HTTP_HOST} ^(^.*)\.mywebsite.com
RewriteRule (.*)  dostuff.php?username=%1

다른 팁

당신이 후에있는 기능은 호출됩니다 와일드 카드 하위 도메인. 각 하위 도메인에 대해 DNS를 설정할 필요가 없으며 대신 리디렉션에 Apache Rewrites를 사용합니다. 멋진 튜토리얼을 찾을 수 있습니다 여기, 그러나 수천 개의 튜토리얼이 있습니다. 다음은 해당 자습서에서 필요한 코드입니다.

<VirtualHost 111.22.33.55>
    DocumentRoot /www/subdomain
    ServerName www.domain.tld
    ServerAlias *.domain.tld
</VirtualHost>

그러나 VirtualHosts를 사용해야하므로 로컬 .htaccess 대신 서버의 httpd.conf 파일에 설정해야합니다.

나는 Mark와 조금 다릅니다. 전체 도메인을 통과하고 PHP에서 하위 도메인을 잡습니다.

RewriteCond {REQUEST_URI} !\.(png|gif|jpg)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?uri=$1&hostName=%{HTTP_HOST}

이것은 이미지를 무시하고 다른 모든 것을 my index.php 파일에 맵핑합니다. 그래서 내가 가면

http://fred.mywebsite.com/album/Dance/now

난 돌아가 겠어

http://fred.mywebsite.com/index.php?uri=album/Dance/now&hostName=fred.mywebsite.com

그런 다음 Index.php 코드에서 호스트 이름의 사용자 이름을 폭발시킵니다. 이것은 나에게 멋진 예쁜 SEO URL을 제공합니다.

우리는 위에서 설명한 것처럼 WildCard DN을 설정합니다. 따라서 레코드는 *.yourname.com입니다

그런 다음 모든 하위 도메인은 실제로 같은 장소로 이동하지만 PHP는 각 하위 도메인을 다른 계정으로 취급합니다.

다음 코드를 사용합니다.

$url=$_SERVER["REQUEST_URI"];
$account=str_replace(".yourdomain.com","",$url);

이 코드는 방금 설정합니다 $account 변수 하위 도메인과 동일합니다. 그런 다음 계정에 따라 파일 및 기타 정보를 검색 할 수 있습니다.

이것은 위에 나열된 방식만큼 효율적이지는 않지만, 바인딩 및/또는 제한에 액세스 할 수없는 경우 htaccess이 방법이 작동해야합니다 (호스트가 와일드 카드를 설정하는 한).

우리는 실제로이 방법을 사용하여 Multi-Company 전자 상거래 애플리케이션을 위해 고객 데이터베이스에 연결하지만 귀하에게도 효과가있을 수 있습니다.

사용할 수있을 때 .htaccess 파일로 소란하지 마십시오. Apache Mass Virtual Hosting.

문서에서 :

#include part of the server name in the filenames VirtualDocumentRoot /www/hosts/%2/docs

어떤 식 으로든 그것은 당신의 질문의 반대입니다. 모든 '하위 도메인'은 사용자입니다. 사용자가 존재하지 않으면 404가됩니다.

유일한 단점은 환경 변수입니다 DOCUMENT_ROOT 올바르게 설정되지 않습니다 사용된 하위 디렉토리이지만 de htconfig의 default document_root입니다.

하위 도메인 및 다중 도메인 웹 앱을위한 간단한 PHP 솔루션

단계 1. DNS를 도메인 (또는 도메인)에 "*"로 제공합니다.

A record => *.example.org
A record => *.example.net

2 단계. 사용자를 등록하거나 로그인을 변경할 때 로그인 고유성을 점검하십시오. 또한 해당 로그인의 점을 피하십시오.

단계 3. 그런 다음 쿼리를 확인하십시오

        // Request was http://qwerty.example.org
        $q = explode('.', $_SERVER['HTTP_HOST']);
        /*
            We get following array
            Array
            (
                [0] => qwerty
                [1] => example
                [2] => org
            )
        */

        // Step 4.
        // If second piece of array exists, request was for 
        // SUBDOMAIN which is stored in zero-piece $q[0]
        // otherwise it was for DOMAIN

        if(isset($q[2])) {
            // Find stuff in database for login $q[0] or here it is "qwerty"
            // Use $q[1] to check which domain is asked if u serve multiple domains
        }

?>

이 솔루션은 다른 도메인을 제공 할 수 있습니다

qwerty.example.org
qwerty.example.net 

johnsmith.somecompany.com
paulsmith.somecompany.com

다른 도메인에 다른 도메인에 동일한 닉이 필요한 경우 로그인을 등록 할 때 도메인에 사용자 선택을 저장해야 할 수도 있습니다.

smith.example.org // Show info about John Smith
smith.example.net // Show info about Paul Smith 

잠재적으로] URL을 다시 작성할 수 있지만 예 : 사용자가 추가되면 자체 하위 도메인을 얻을 수 있도록 DNS 설정을 제어해야합니다.

새로운 하위 도메인을 처리하기 위해 www 서버의 구성 변경 외에도 코드는 DNS 레코드를 변경해야합니다. 따라서 자신의 BIND (또는 이와 유사한)를 실행하지 않는 한 이름 서버 제공 업체의 구성에 액세스하는 방법을 알아 내야합니다. 그들이 일종의 API를 제공하지 않으면 까다로울 수 있습니다.

업데이트 : 예, 레지스트라가 이름 서버 서비스를 제공하는 경우 (종종 그렇듯이) 등록 기관에 확인합니다. 나는 전에이 옵션을 탐색 한 적이 없지만 대부분의 소비자 등록 기관은 그렇지 않은 것으로 생각합니다. 나는 Godaddy API와 Godaddy DNS API를 위해 Google에 글을 썼지 만 아무것도 올릴 수 없었기 때문에 최상의 옵션은 제공자와 온라인 도움말을 확인하는 것이며, 질문에 대답하지 않으면 보류하십시오. 그들의 지원 직원의.

먼저 서버가 와일드 카드 하위 도메인을 허용하도록 구성되어 있는지 확인해야합니다. 나는 수동으로 지명 된 서브 오메인을 만들어 justhost에서 그것을 달성했다. *. 또한 호출 된 폴더도 지정했습니다 subdomains 와일드 카드 하위 도메인의 문서 루트로. 이것을 a에 추가하십시오 .htaccess 서브 도메인 폴더의 파일 :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

마지막으로, 하위 도메인 폴더에 폴더를 작성한 다음 하위 도메인 파일을 해당 디렉토리에 배치하면됩니다.

이것은 달성 될 수 있습니다 .htaccess 서버가 와일드 카드 하위 도메인을 허용하도록 구성된 경우. 나는 수동으로 지명 된 서브 오메인을 만들어 justhost에서 그것을 달성했다. * 하위 도메인이라는 폴더를 와일드 카드 하위 도메인의 문서 루트로 지정합니다. 이것을 당신에게 추가하십시오 .htaccess 파일:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

마지막으로 하위 도메인 용 폴더를 만들고 하위 도메인 파일을 배치하십시오.

CloudFlare(무료)를 사용하는 경우 해당 API를 사용하여 DNS를 쉽게 관리할 수 있다는 점을 덧붙이고 싶었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top