문제

사람들은 내 사이트에 자신의 섹션을 등록 할 수 없으며 해당 섹션을 내 사이트의 하위 도메인으로 만들지 않았습니다. 그래서 누군가가 '테스트'를 등록하고 'test.example.com'을 가질 수 있습니다.

도움이 되었습니까?

해결책

mod_rewrite 이것에 가장 적합한 도구가 아닐 수도 있습니다. Rewriterules는 파일을 다른 것에 매핑하는 데 적합하지만 실제로 도메인 매칭을위한 것은 아닙니다.

당신이 사용할 수있는 최선입니다 mod_rewrite 다음은 다음과 같습니다.

RewriteEngine On
# Skip www.domain.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule ^/(.*)$  site.php?domain=%1&file=$1 [L]

실제로 유용하지 않습니다. 프로그래밍 방식으로 값을 확인하면 대신에 내가 권장하는 것 HTTP_HOST 따라서 :

function get_subdomain() {
  if(preg_match('/^([^.]+)\.domain\.com/i', $_SERVER['HTTP_HOST'], $matches)) 
    return $matches[1];
}

다른 팁

가상 호스트 컨테이너에서 Apache 구성 (예 : www.mydomain.com 등)의 "특수"도메인을 청구하도록 Apache를 구성하고 다른 가상 호스트에 기본값을 가질 수 있습니다. 그런 다음 기본 URL을 URL을 검사하고 사용자를 올바른 영역으로 보낸 디스패치 응용 프로그램으로 다시 작성할 수 있습니다.

Apache 2.0 문서 :

거의 모든 Apache 지시문은 VirtualHost 컨테이너로 들어갈 수 있습니다. 첫 번째 가상 호스트 섹션은 알려진 서버 이름이없는 요청에 사용됩니다.

첫 번째 가상 호스트에서 *.mydomain.com을 처리하도록 코드를 넣으십시오.

<VirtualHost *:80>
  Servername custom.mydomain.com
  DocumentRoot /var/www/html/custom
  RewriteEngine on
  RewriteRule ^/$ /var/www/cgi-bin/dispatch.cgi [R]
  # more configs here
</VirtualHost>

<VirtualHost *:80>
  Servername www.mydomain.com
  DocumentRoot /var/www/html/homepage
  # more configs here
</VirtualHost>

Dispatch.cgi에서 호출 URL을 검사하여 사용자가 어디로 가야하는지 확인하십시오. 모든 하위 도메인을 수락하기 위해 DNS를 설정해야합니다.

도움이되기를 바랍니다!

실제로, 우리는 작년에 많은 문제 없이이 기술을 사용해 왔습니다. mod_rewrite 구성은 다음과 같습니다.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.mydomain.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com
RewriteCond %{REQUEST_URI} !admin
RewriteRule (.*) /admin/ [R=301,L]
RewriteRule ^admin(.*)$ hosted/admin/$1 [QSA,L]

발생하는 것은 사용자가 hossaccount.mydomain.com/admin으로 향하는 것입니다.

그런 다음 PHP를 사용하여 도메인 이름의 계정 부분을 식별합니다. $ _server [ 'server_name']와 같은 것을 사용하거나 도메인 이름을 가져오고 구문 분석하는 방법을 사용하면 매우 잘 작동합니다.

이 구성을 httpd.conf에 유지하면 .htaccess로 유지되면 트래픽이 높을수록 CPU 문제가됩니다.

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