Twórz subdomeny w locie z.htaccess (PHP)
Szukam systemu, który przy rejestracji utworzy subdomenę na mojej stronie dla obszaru konta użytkowników.
Np. johndoe.website.com
Myślę, że byłoby to coś wspólnego zplik htaccess i ewentualnie przekierowanie do innej lokalizacji na stronie? Nie wiem. Ale wszelkie informacje na początek będą bardzo mile widziane.
Tworzenie obszaru rejestracji nie jest problemem - robiłem to wiele razy. Nie wiem tylko od czego zacząć z subdomeną.
9 answers
The quick rundown
- musisz utworzyć domenę wieloznaczną na serwerze DNS*. website.com
- Następnie w kontenerze vhost musisz również podać symbol wieloznaczny *.website.com - odbywa się to w
ServerAlias
DOCs - następnie wyodrębnij i zweryfikuj subdomenę w PHP i wyświetl odpowiednie dane
Wersja długa
1. Tworzenie wpisu DNS z symbolami wieloznacznymi
W ustawieniach DNS musisz utworzyć wpis domeny wildcard np. *.example.org
. Wpis wildcard wygląda tak:
*.example.org. 3600 A 127.0.0.1
2. Dołącz wildcard w vhost
Następnie w konfiguracji Apache musisz skonfigurować kontener vhost, który określa symbol wieloznaczny w ServerAlias
DOCs dyrektywa. Przykładowy kontener vhost:
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
3. Sprawdź, na której subdomenie się znajdujesz w PHP
Następnie w skryptach PHP można znaleźć domenę patrząc w $_SERVER
super zmienna globalna. Oto przykład przechwytywania subdomeny w PHP:
preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
$subdomain = $matches[1];
}
Użyłem regex tutaj, aby umożliwić osobom odwiedzającym Twoją stronę poprzez www.subdomain.example.org lub subdomain.example.org.
Jeśli nigdy nie spodziewasz się, że będziesz miał do czynienia z www. (lub inne subdomeny) wtedy możesz po prostu użyć fragmentu w ten sposób:
$subdomain = substr(
$_SERVER['SERVER_NAME'], 0,
strpos($_SERVER['SERVER_NAME'], '.')
);
Masowy Hosting Wirtualny
Masowy hosting wirtualny jest nieco innym schematem niż powyższy, ponieważ zwykle używasz go do hostowania wiele odrębnych stron internetowych zamiast próbować go używać, zasila aplikację zgodnie z pytaniem.
Udokumentowałem moje masowe środowisko wirtualnego hostingu oparte na mod_rewrite w poście na moim blogu , na które możesz spojrzeć, jeśli chcesz iść tą drogą. Istnieje również, oczywiście, odpowiednia strona podręcznika Apache .
Apache ma również wewnętrzny sposób radzenia sobie z masowym hostingiem wirtualnym, który jest nieco mniej elastyczny niż mod_rewrite metoda, którą zastosowałem. Wszystko to jest opisane na stronie podręcznika Apache dynamicznie konfigurowanej masowej wirtualnej hostingu .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-16 05:53:18
Możesz zezwolić na każdą subdomenę, a następnie sprawdzić, czy subdomena jest poprawna. Na przykład:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
RewriteRule !^index\.php$ index.php [L]
Wewnątrz {[2] } możesz rozpakować subdomenę używając:
if (preg_match('/^([^.]+)\.example\.com$/', $_SERVER['HTTP_HOST'], $match)) {
var_dump($match[1]);
}
Ale wszystko to wymaga, aby twój serwer WWW akceptował każdą nazwę subdomeny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-25 14:18:16
Oprócz konfigurowania DNS wildcard, możesz rzucić okiem na Dynamiczny masowy Hosting wirtualny dla Apache który jest jak rozwiązałem to w przeszłości
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-25 14:38:43
Najprostszym sposobem jest przekierowanie wszystkich subdomen (z symbolami wieloznacznymi *), aby wskazywały na Twój /wwwroot. Więc postaw .htaccess do tego folderu z następującym kodem:
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]
Spowoduje to, że każdy podfolder folderu / wwwroot w subdomenie (foldername.domain.com).
Znalezione lata temu na http://www.webmasterworld.com/apache/3163397.htm
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-25 15:55:47
Łatwiej było zrobić to z PHP. W rzeczywistości tworzy subdomenę w cPanel i utwórz folder pod żądaną nazwą domeny. Tak jak zrobisz to ręcznie w cPanel, ale wszystko to jest zrobione w milisekundach przez prostą funkcję PHP. Nie trzeba klikać:)
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";
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-31 16:27:28
To nie ma z tym nic wspólnego .htaccess. Musisz skonfigurować rekordy DNS i hosting wirtualny dla subdomen.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-25 14:17:23
Mod_vhost_alias {[3] } jest właściwym modułem do tego celu.
W jednej linii możesz powiedzieć Apache ' owi, aby spojrzał na właściwe miejsce, z hashowaniem katalogów itp. Na przykład linia:
VirtualDocumentRoot /http/users/%3.1/%3.2/%3
Powiedziałby Apache, aby ustawić root dokumentu na/http/users/S/u / subdomena, gdy jest to wymagane dla subdomain.yourdomain.com
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-14 11:20:22
Myślę, że dzika karta DNS z dynamicznym masowym hostingiem wirtualnym Apache jest również rozsądnym rozwiązaniem. Chociaż nigdy nie próbowałem.
Jeśli masz potrzebę skalowania się do wielu serwerów lub inne rozwiązania po prostu nie działają dla Ciebie, polecam korzystanie z serwera DNS opartego na bazie danych. W przeszłości z powodzeniem używałem MyDNS. Ponieważ używa MySQL (lub PostgreSQL), możesz aktualizować DNS w locie za pomocą PHP lub czegokolwiek innego. Kod na to nie wygląda został zaktualizowany w jakiś czas, ale to DNS i dlatego nie do końca najnowocześniejsze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-25 15:13:18
Metody tworzenia subdomen wieloznacznych
Najpierw musisz utworzyć ustawienia DNS za pomocą edytora DNS serwera.
-
Utwórz
A
rekord w Ustawieniach DNS z hostem*
dziką kartą w adresie IP serwera.* 1400 IN A ip_address
-
Utwórz ponownie rekord
A
w Ustawieniach DNS z hostem@
lubdomain_name.tld
w adresie IP serwera. tld oznacza domeny najwyższego poziomu lub rozszerzenie domen, takich jak. com,. org itp....@ 1400 IN A ip_address
lubdomain_name.tld 1400 IN A ip_address
-
Create
CNAME
record like:www 1400 IN A domainname.tld
- Utwórz subdomenę za pomocą
*
wildcard jak*.domain.tld
-
Utwórz htaccess w katalogu subdomeny
*.domain.tld
i umieść ten kod:Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^([aA-zZ0-9]+)$ index.php?data=$1 RewriteCond %{HTTP_HOST} ^([aA-zZ0-9]+)\.([aA-zZ0-9-]+)\.([aA-zZ]+) RewriteRule ([aA-zZ0-9]+) index.php?data=%1
Przetestuj swoją pierwszą subdomenę typu wildcard jak
example.domainname.tld
Jeśli nie jesteś zainteresowany, aby przekazać dane jako parametr za pomocą htaccess, można również uzyskać dane za pomocą następującego kodowania:
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();
I użyj zmiennej globalnej w dowolnym miejscu, jak global $get_data
.
echo $get_data->data; //example
(Uwaga: Ta klasa służy głównie do uzyskania dokładnej nazwy subdomeny z http_host
. ponieważ niektóre dodatkowe nazwy połączone przed subdomeną są również stosowane, jak www.example.domainname.tld
. Aby uzyskać dokładne wartości, zamiast używać $_SERVER['query_string']
lub przekazać parametry htaccess na stronie indeksu)
6.Przyspiesz wykonanie tej subdomeny wieloznacznej użyj N sekund w TTL-DNS Ustawienia.
7.Sprawdź subdomenę po podanym czasie ttl (600 - 10 minut) jak => http://abc.domain.tld
(Uwaga: subdomeny wieloznaczne nie nadpisują istniejących subdomen. Ponieważ pierwszy priorytet zawsze dla istniejących subdomen)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-02 10:29:32