2012-03-29 2 views
1

남자!PHP의 하위 도메인과 도메인을 리디렉션하는 표준 상황이 아닙니다.

나는 내가하고 싶은 것을 설명 할 것이다. 누구든지이 문제를 해결할 수 있다면 조언을 해주십시오.

나는 웹 사이트가있어서 http://mysite.com이라고 부르 자. 하위 도메인 인 경우 http://myname.mysite.com을 예로 들어 보겠습니다.

하나의 설정 파일 inc.php가 있으며 각각의 개인 데이터는 mysite.com 및 myname.mysite.com (예 : ICQ 번호)입니다. 모든 일반 웹 사이트 파일은 mysite.com 디렉토리에 있습니다.

하위 도메인에서 완전히 유사한 파일을 만들지 않기 위해 myname.mysite.com의 하위 도메인에있는 mysite.com의 모든 일반 파일을 사용할 수 있기를 원합니다. 그러나 myname.mysite.com에있는 개별 구성 파일을 포함하여 개별 ICQ 번호가 포함되어 있습니다.

이 내가이 일을하는 방법의 예입니다 :

  1. 홈페이지 도메인 "mysite.com"루트 폴더에 페이지를 "public_html을"이 있습니다 index.php에, about.php, articles.php 및 구성 파일 inc.php와 icq 번호 "111-111". 따라서 "mysite.com"웹 사이트를 방문하면 inc.php의 ICQ 번호가 표시됩니다.

  2. 하위 도메인 "myname.mysite.com"에는 ICQ 번호가 "222-222"인 구성 파일 inc.php 만있는 "public_html/subdomain/myname"폴더가 있습니다. 그래서 myname.mysite.com에 가면 "mysite.com"의 웹 페이지를 볼 수 있지만 ICQ 번호는 여기 "public_html/subdomain/myname/inc.php"에서 가져옵니다. 그리고 주소 표시 줄에 당신과 같이 웹 페이지가 표시됩니다 http://myname.mysite.com/index.php http://myname.mysite.com/about.php http://myname.mysite.com/articles.php

그래서 방문자가 개별 웹 사이트 myname.mysite를 탐색 용 있다고 생각합니다. co.kr 사이트를 방문하지만 실제 방문자는 mysite.com 웹 페이지에서 협조합니다. 따라서 mysite.com에서 콘텐츠를 변경하면이 콘텐츠가 myname.mysite.com에서 변경됩니다.

필자는이 파트너가 개인적인 하위 도메인 이름을 내 파트너에게 제공하지만 개인 구성 파일 inc.php와 함께 컨설팅을 위해 ICQ 번호를 사용하여 제휴 프로그램을 구성하고자하므로이 직원이 필요합니다.

나는 내가하고 싶은 것을 설명하려고 노력했다. 하나님,이 상황을 설명하기 위해 열심히 노력하십시오. 아, 내가 PHP에서하고 싶은 모든 것을 언급하는 것을 잊어 버렸습니다.

답변

1

유일한 변경 사항이 inc.php 파일 인 경우 아래 코드는 subdomain.mysite.com과 같은 1 수준 하위 도메인과 일부 수정 사항을 포인트 (3)로 가정합니다. 및 (4) sub.subdomain.mysite.com과 같이 더 깊은 하위 도메인에 필요합니다.

<VirtualHost *:80> 
    ... 

    SernarName mysite.com 
    ServerAlias *.mysite.com 

    ... 
</VirtualHost> 

2) 하나 개의 디렉토리 및 지점의 모든 하위 도메인에 대한 모든 PHP 파일이 : 아파치 가상 호스트 설정에서

1), 메인 도메인에 대한 별칭으로 모든 하위 도메인을 정의 귀하의 아파치 설정을 그 dir.그래서 inc.php, inc-subdomain1.php, inc-subdomain2.php과 :

3) 그 디렉토리에서 inc 파일들을 생성한다. ,의,이 모든 것을 지금

if(isset($_SERVER['HTTP_HOST'])) { 
    $host = explode('.', strtolower($_SERVER['HTTP_HOST'])); 
    if(count($host) == 3) { //have something more than just mysite.com 
     $subdomain = $host[0]; 
     if($subdomain == 'www') {  //www.mysite.com is the same as just mysite.com 
      $subdomain == ''; 
     } 
    } 
    else {  //if just mysite.com, then no subdomains 
     $subdomain = ''; 
    } 
} 
else { //if no http_host info exists, then assume it's just mysite.com 
    $subdomain = ''; 
} 

$incfile = 'inc' . ($subdomain == '' ? '' : "-$subdomain") . '.php'; 
if(!file_exists($incfile)) { //if no include file for the requested subdomain, just use mysite.com 
    $incfile = 'inc.php'; 
} 

require_once($incfile); 

:

4) 당신이 당신의 위치에있는 다른 모든 파일에서 포함 config.php 파일의 일종을 가지고 있고, 그것을 이런 식으로 뭔가를 포함해야 물론 당신에게 많은 유연성을 줄 것입니다. 그러나 필요한 모든 것이 다른 ICQ 번호 일 경우에는 필요하지 않을 수도 있습니다. 이 경우, 나는이 지점을 바꿀 것 (4) 코드는 1, 파일을 포함 inc.php 말을하고, 그 파일에 이런 일이있을 수 있습니다 :

$icq_default = '111-111'; 
$icq_nums = array('subdomain1' => '222-222', 
        'subdomain2' => '333-333', 
        ...); 

if(isset($_SERVER['HTTP_HOST'])) { 
    $host = explode('.', strtolower($_SERVER['HTTP_HOST'])); 
    if(count($host) == 3) { //have something more than just mysite.com 
     $subdomain = $host[0]; 
     if($subdomain == 'www') {  //www.mysite.com is the same as just mysite.com 
      $subdomain == ''; 
     } 
    } 
    else {  //if just mysite.com, then no subdomains 
     $subdomain = ''; 
    } 
} 
else { //if no http_host info exists, then assume it's just mysite.com 
    $subdomain = ''; 
} 

$required_number = isset($icq_numbers[$subdomain]) ? $icq_numbers[$subdomain] : $icq_default; 
+0

나는 당신의 것을 읽기 전에 나의 대답을 올렸다. 우리가 매우 비슷한 접근법을 제안한다는 사실을 눈치 채는 것은 (특히 OP에있어서) 확실합니다. – ghbarratt

+0

@ghbarratt 네, 똑같은 일들이 있습니다. –

+0

@Aleks G 공유 호스팅을 사용하면 어떻게됩니까? 가상 호스트 구성을 변경할 수있는 액세스 권한이 없습니다. 거기에 다른 변종을 PHP 수준에서 그것을 실현하는 방법이있을 수 있습니까? htaccess 스크립트 일 수 있습니까? – ilnur777

1

것은 정말 하나가있을 것입니다 경우를 (또는 몇 가지 작은 설정이 하위 도메인간에 다르면 동일한 문서/웹 루트의 모든 하위 도메인에 대한 서비스를 고려해야합니다. 가상 호스트 설정을 조정하면됩니다. 아파치에서는이 같은 (NameVirtualHost *:80를 가정)을 보일 것이다

<VirtualHost *:80> 
    ServerName mysite.com 
    ServerAlias *.mysite.com 
    DocumentRoot /var/www/websites/mysite 
</VirtualHost> 

그런 다음 코드 내에서, 당신과 같이 판단 할 수있는 하위 도메인 사용하여 사용 (또는 무시)하는 설정을 판별 할 수 있습니다

$domain = !empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; 
$subdomain = implode('.', explode('.', $domain, -2)); 

그런 다음 $subdomain을 사용하여 사용할 설정을 결정하십시오.

구현 선택이 사용자의 요구에 매우 주관적이기 때문에 하위 도메인에서 사용할 설정을 결정하는 방법에 대한 예제 코드를 제공하지 않을 것입니다.


편집 - 첫번째 코멘트에서 영업 이익의 질문에 응답

당신이 절대적으로 당신의 가상 호스트 구성에 ServerAlias *.mysite.com를 넣을 수없는 경우 여전히 상황이 유사 어쨌든 작동하도록하는 쉬운 방법이있을 수 있습니다 : 문서/웹 루트에 대해 심볼릭 링크를 사용하십시오.

그래서 myname.mysite.com의 문서/웹 루트가 /var/www/websites/myname.mysite.com이고 mysite.com의 문서/웹 루트가/var/www/websites/mysite 인 경우.

cd /var/www/websites/ 
ln -s mysite.com myname.mysite.com 

이 사용하는 파일을 야기한다 : COM

그런 다음 웹 서버에 /var/www/websites/mysite.com에 심볼릭 링크를 /var/www/websites/myname.mysite.com하기/myname.mysite.com에서 mysite.com의 서버와 동일한 위치에서 Apache를 제공합니다.


편집 -의 cPanel

그래, 나는 지금 cPanel is lame 것을 확신합니다.

이미 mod_proxy를 사용하도록 설정 한 경우 각 루트에서이 작업을 수행 할 수 있습니다.이 경우에도 HTTPS를 통해 들어오는 요청을 고려하지 않습니다 물론 htaccess로

RewriteRule ^([^/]*)(/?)(.*) http://mysite.com/$1$2$3 [L,P] 

. mod_proxy를 사용하지 않으려면 myname.mysite.com의 웹/문서 루트에있는 심볼릭 링크로 모든 요청을 보내면되지만, 이는 심볼릭 링크 생성 문제로 되돌아갑니다. 문서/웹 루트를 심볼릭 링크로 만드는 것보다는 문서/웹 루트에서 심볼릭 링크를 얻는 것이 더 쉽습니다.

이 아이디어가 도움이되기를 바랍니다. cPanel이 제공하는 것 이상으로 무언가를해야 할 필요가있는 것처럼 보입니다.

+0

공유 호스팅을 사용하면 어떻게됩니까? 가상 호스트 구성을 변경할 수있는 액세스 권한이 없습니다. 거기에 다른 변종을 PHP 수준에서 그것을 실현하는 방법이있을 수 있습니까? htaccess 스크립트 일 수 있습니까? – ilnur777

+0

@ ilnur777 수정 된 답변보기 서버의 디렉토리 이름에 대한 세부 정보를 제공하려면 답변을 더 구체적으로 맞출 수 있습니다. – ghbarratt

+0

공유 호스팅을 사용하고 있으며 서버 구성에 액세스하여 변경할 수 없습니다. 하위 도메인이 너무 많이 생성됩니다. 문제의 디렉토리를 주었기 때문에 모든 파일이있는 디렉토리 "public_html"이 있습니다. 모든 하위 도메인은이 디렉토리 "public_html/subdomain"에 cPanel로 생성됩니다. – ilnur777

관련 문제