가입시 내 웹 사이트에 사용자 계정 영역에 대한 하위 도메인을 만드는 시스템을 만들려고합니다.
예 : johndoe.website.com
.htaccess 파일과 관련이 있으며 웹 사이트의 다른 위치로 리디렉션 될 수 있다고 생각합니까? 나는 실제로 모른다. 그러나 나를 시작하는 모든 정보는 크게 감사하겠습니다.
가입 영역을 만드는 것은 문제가 아닙니다.이 작업을 여러 번 해왔습니다. 하위 도메인으로 시작해야 할 곳이 확실하지 않습니다.
답변
빠른 요약
- DNS 서버 * .website.com에 와일드 카드 도메인을 만들어야합니다.
- 그런 다음 가상 호스트 컨테이너에서 와일드 카드도 지정해야합니다. * .website.com-이것은 DOC 에서 수행됩니다.
ServerAlias
- 그런 다음 PHP에서 하위 도메인을 추출 및 확인하고 적절한 데이터를 표시합니다.
긴 버전
1. 와일드 카드 DNS 항목 만들기
DNS 설정에서 와 같은 와일드 카드 도메인 항목 을 만들어야합니다 *.example.org
. 와일드 카드 항목은 다음과 같습니다.
*.example.org. 3600 A 127.0.0.1
2. vhost에 와일드 카드 포함
다음으로 Apache 구성에서 ServerAlias
DOC 지시문에 와일드 카드를 지정하는 가상 호스트 컨테이너를 설정해야합니다 . 가상 호스트 컨테이너의 예 :
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
3. PHP에서 어떤 하위 도메인에 있는지 확인
그런 다음 PHP 스크립트에서 $_SERVER
super 전역 변수를 살펴봄으로써 도메인을 찾을 수 있습니다 . 다음은 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 매뉴얼 페이지도 있습니다.
Apache는 또한 내가 사용한 mod_rewrite 방법보다 약간 덜 유연한 대량 가상 호스팅을 처리하는 내부 방법을 가지고 있습니다. 이것은 모두 Apache Dynamically Configured Mass Virtual Hosting 매뉴얼 페이지에 설명되어 있습니다.
답변
먼저 모든 하위 도메인을 허용 한 다음 하위 도메인이 유효한지 확인할 수 있습니다. 예를 들면 :
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]);
}
그러나이 모든 것은 웹 서버가 모든 하위 도메인 이름을 허용해야합니다.
답변
DNS 와일드 카드를 설정하는 것 외에도 과거에이 문제를 해결 한 방법 인 Apache 용 동적 대량 가상 호스팅을 살펴볼 수 있습니다.
답변
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";
}
답변
가장 쉬운 방법은 / 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 에서 찾았습니다
.
답변
.htaccess와는 관련이 없습니다. 하위 도메인에 대한 DNS 레코드 및 가상 호스팅을 설정해야합니다.
답변
Mod_vhost_alias 는이를 수행하는 데 적합한 모듈입니다.
한 줄로 Apache에게 디렉토리 해싱 등으로 올바른 위치를 찾도록 지시 할 수 있습니다. 예를 들면 다음과 같습니다.
VirtualDocumentRoot /http/users/%3.1/%3.2/%3
subdomain.yourdomain.com에 대해 요청되면 Apache에 문서 루트를 / http / users / s / u / subdomain으로 설정하도록 지시합니다.