Szybki przegląd
- Musisz utworzyć domenę z symbolem wieloznacznym na swoim serwerze DNS * .website.com
- Następnie w kontenerze vhost musisz również określić symbol wieloznaczny * .website.com - odbywa się to w
ServerAlias
DOC
- Następnie wyodrębnij i zweryfikuj subdomenę w PHP i wyświetl odpowiednie dane
Wersja długa
1. Utwórz wpis DNS z symbolem wieloznacznym
W ustawieniach DNS musisz utworzyć wpis domeny z symbolem wieloznacznym, taki jak *.example.org
. Wpis z symbolem wieloznacznym wygląda następująco:
*.example.org. 3600 A 127.0.0.1
2. Dołącz symbol wieloznaczny do vhost
Następnie w konfiguracji Apache musisz ustawić kontener vhost, który określa symbol wieloznaczny w dyrektywie ServerAlias
DOCs . Przykładowy kontener vhost:
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
3. Sprawdź, na której subdomenie jesteś w PHP
Następnie w skryptach PHP możesz znaleźć domenę, patrząc w $_SERVER
super globalnej zmiennej. Oto przykład przechwycenia subdomeny w PHP:
preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
$subdomain = $matches[1];
}
Użyłem tutaj wyrażenia regularnego, aby umożliwić ludziom odwiedzanie Twojej witryny za pośrednictwem www.subdomain.example.org lub subdomain.example.org.
Jeśli nigdy nie spodziewasz się, że będziesz mieć do czynienia z www. (lub inne subdomeny), możesz po prostu użyć podciągu w ten sposób:
$subdomain = substr(
$_SERVER['SERVER_NAME'], 0,
strpos($_SERVER['SERVER_NAME'], '.')
);
Masowy hosting wirtualny
Masowy hosting wirtualny to nieco inny schemat niż powyższy, ponieważ zwykle używasz go do hostowania wielu różnych witryn internetowych, zamiast próbować używać go do zasilania aplikacji, jak sugeruje pytanie.
Moje środowisko wirtualnego hostingu masowego, oparte na mod_rewrite, udokumentowałem wcześniej w poście na moim blogu , do którego możesz się przyjrzeć, jeśli jest to droga, którą chcesz wybrać. Istnieje również oczywiście odpowiednia strona podręcznika Apache .
Apache ma również wewnętrzny sposób radzenia sobie z masowym wirtualnym hostingiem, który jest nieco mniej elastyczny niż metoda mod_rewrite, której użyłem. Wszystko to jest opisane na stronie podręcznika dotyczącego dynamicznie konfigurowanego masowego hostingu wirtualnego Apache .
wildcard subdomains
, zobacz moje rozwiązanie, aby to zrobić w.htaccess
.RewriteRule "^/?(.*)" "http://%{HTTP_HOST}/%{HTTP_HOST}/$1" [L,R,NE]
Możesz najpierw zezwolić na każdą subdomenę, a następnie sprawdzić, czy jest ona prawidłowa. Na przykład:
Wewnątrz
index.php
możesz wyodrębnić subdomenę za pomocą:Ale wszystko to wymaga, aby twój serwer internetowy akceptował każdą nazwę subdomeny.
źródło
Oprócz ustawienia symbolu wieloznacznego DNS możesz rzucić okiem na Dynamic Mass Virtual Hosting for Apache, w którym rozwiązałem ten problem w przeszłości
źródło
Łatwiej było mi to robić z PHP. W rzeczywistości tworzy subdomenę w cPanel i utwórz folder pod żądaną nazwą domeny. Jak zrobisz to ręcznie w cPanel, ale wszystko to jest robione w milisekundach przez prostą funkcję PHP. Nie trzeba klikać :)
źródło
Najłatwiejszym sposobem jest przekierowanie wszystkich subdomen (z symbolem wieloznacznym *) tak, aby wskazywały na twój / wwwroot. Następnie umieść .htaccess w tym folderze z następującym kodem:
Spowoduje to, że każdy podfolder folderu / wwwroot będzie akceptowany przez subdomenę (nazwa_folderu.domena.com).
Znalezione lata temu na http://www.webmasterworld.com/apache/3163397.htm
źródło
To nie ma nic wspólnego z .htaccess. Musisz skonfigurować rekordy DNS i hosting wirtualny dla subdomen.
źródło
Mod_vhost_alias jest odpowiednim modułem do tego.
Za pomocą jednej linii możesz powiedzieć Apache, aby szukał we właściwym miejscu, z haszowaniem katalogów itp. Na przykład linia:
powie Apache, aby ustawił katalog główny dokumentu na / http / users / s / u / subdomain, gdy zostanie poproszony o subdomain.yourdomain.com
źródło
Myślę, że DNS z dziką kartą z Dynamic Mass Virtual Hosting Apache jest również rozsądnym rozwiązaniem. Chociaż nigdy tego nie próbowałem.
Jeśli potrzebujesz skalować w poziomie do wielu serwerów lub inne rozwiązania po prostu nie działają, polecam użycie serwera DNS opartego na bazie danych. W przeszłości z powodzeniem korzystałem z MyDNS . Ponieważ używa MySQL (lub PostgreSQL), możesz aktualizować swój DNS w locie za pomocą PHP lub cokolwiek innego. Kod nie wygląda tak, jakby był aktualizowany od jakiegoś czasu, ale jest to DNS, a zatem nie do końca nowatorski.
źródło
Metody tworzenia poddomeny z symbolami wieloznacznymi
Najpierw musisz utworzyć ustawienia DNS za pomocą edytora DNS serwera.
Utwórz
A
rekord w ustawieniach DNS z symbolem*
wieloznacznym w adresie IP serwera.* 1400 IN A ip_address
Utwórz ponownie
A
rekord w ustawieniach DNS z adresem hosta@
lubdomain_name.tld
adresem IP serwera. tld oznacza domeny najwyższego poziomu lub rozszerzenia domen, takie jak .com, .org itp.@ 1400 IN A ip_address
lubdomain_name.tld 1400 IN A ip_address
Utwórz
CNAME
rekord, taki jak:www 1400 IN A domainname.tld
*
symbolem wieloznacznym*.domain.tld
Utwórz htaccess w swoim katalogu subdomeny
*.domain.tld
i umieść ten kod:Przetestuj swoją pierwszą subdomenę z symbolem wieloznacznym, na przykład
example.domainname.tld
Jeśli nie jesteś zainteresowany przekazywaniem danych jako parametru za pomocą htaccess, możesz również uzyskać dane za pomocą następującego kodowania:
i używaj swojej zmiennej globalnej w dowolnym miejscu, np
global $get_data
.(uwaga: ta klasa jest używana głównie do uzyskiwania dokładnej nazwy subdomeny z
http_host
., ponieważ niektóre dodatkowe nazwy połączone przed twoją subdomeną mają również zastosowanie, npwww.example.domainname.tld
. Ten zwrot$_GET['data']='wwww'
Więc proponuję użyć$_SERVER['http_host']
do uzyskania dokładnych wartości zamiast używania$_SERVER['query_string']
lub przekazanych parametrów htaccess w Twoja strona indeksu)6. Przyspieszenie wykonywania tych subdomen z symbolami wieloznacznymi, użyj N sekund w TTL - USTAWIENIA DNS.
7.Sprawdź subdomenę po podanym czasie ttl (600 - 10 minut), np. =>
http://abc.domain.tld
(uwaga: subdomeny z symbolem wieloznacznym nie zastępują istniejących subdomen. Ponieważ priorytet zawsze ma znaczenie dla istniejących subdomen)
źródło