Ikhtisar singkat
- Anda perlu membuat domain wildcard di server DNS * .website.com
- Kemudian dalam penampung vhost Anda, Anda perlu menentukan wildcard juga * .website.com - Ini dilakukan di
ServerAlias
DOC
- Kemudian ekstrak dan verifikasi subdomain di PHP dan tampilkan data yang sesuai
Versi panjang
1. Buat entri DNS karakter pengganti
Dalam pengaturan DNS Anda, Anda perlu membuat entri domain karakter pengganti seperti *.example.org
. Entri karakter pengganti terlihat seperti ini:
*.example.org. 3600 A 127.0.0.1
2. Sertakan wildcard di vhost
Selanjutnya dalam konfigurasi Apache Anda perlu menyiapkan penampung vhost yang menentukan wildcard di direktif ServerAlias
DOCs . Contoh wadah vhost:
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
3. Cari tahu subdomain Anda di PHP
Kemudian di skrip PHP Anda, Anda dapat mengetahui domain dengan melihat di $_SERVER
variabel super global. Berikut adalah contoh mengambil subdomain di PHP:
preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
$subdomain = $matches[1];
}
Saya telah menggunakan regex di sini untuk mengizinkan orang membuka situs Anda melalui www.subdomain.example.org atau subdomain.example.org.
Jika Anda tidak pernah mengantisipasi harus berurusan dengan www. (atau subdomain lain) maka Anda cukup menggunakan substring seperti ini:
$subdomain = substr(
$_SERVER['SERVER_NAME'], 0,
strpos($_SERVER['SERVER_NAME'], '.')
);
Hosting Virtual Massal
Hosting virtual massal adalah skema yang sedikit berbeda dengan yang di atas karena Anda biasanya menggunakannya untuk meng-host banyak situs web yang berbeda daripada mencoba menggunakannya untuk menjalankan aplikasi seperti yang diajukan pertanyaan.
Saya telah mendokumentasikan lingkungan hosting virtual massal berbasis mod_rewrite saya sebelumnya dalam sebuah posting di blog saya , yang dapat Anda lihat jika itu adalah rute yang ingin Anda ambil. Ada juga, tentu saja, halaman manual Apache .
Apache juga memiliki cara internal untuk menangani hosting virtual massal yang sedikit kurang fleksibel daripada metode mod_rewrite yang telah saya gunakan. Ini semua dijelaskan di halaman manual Apache Dynamically Configured Mass Virtual Hosting .
wildcard subdomains
, lihat solusi saya untuk melakukan ini di.htaccess
.RewriteRule "^/?(.*)" "http://%{HTTP_HOST}/%{HTTP_HOST}/$1" [L,R,NE]
Anda dapat mengizinkan setiap subdomain sejak awal dan kemudian memeriksa apakah subdomain tersebut valid. Sebagai contoh:
Di dalam
index.php
Anda dapat mengekstrak subdomain menggunakan:Tetapi semua ini mengharuskan server web Anda menerima setiap nama subdomain.
sumber
Selain menyiapkan wildcard DNS, Anda mungkin ingin melihat Dynamic Mass Virtual Hosting untuk Apache yang merupakan cara saya menyelesaikannya di masa lalu.
sumber
Saya merasa lebih mudah melakukannya dengan PHP. Faktanya adalah membuat subdomain dalam cPanel dan membuat folder Anda di bawah nama domain yang diinginkan. Seperti yang akan Anda lakukan secara manual di cPanel tetapi semua itu dilakukan dalam milidetik dengan fungsi PHP sederhana. Tidak perlu klik :)
sumber
Cara termudah adalah dengan mengarahkan semua subdomain (dengan wildcard *) untuk mengarah ke / wwwroot Anda. Kemudian taruh .htaccess ke folder ini dengan kode berikut:
Ini akan membuat setiap subfolder dari folder / wwwroot dapat diterima melalui subdomain (foldername.domain.com).
Ditemukan beberapa tahun yang lalu di http://www.webmasterworld.com/apache/3163397.htm
sumber
Ini tidak ada hubungannya dengan .htaccess. Anda harus menyiapkan data DNS dan hosting virtual untuk subdomain.
sumber
Mod_vhost_alias adalah modul yang tepat untuk melakukan ini.
Dengan satu baris Anda dapat memberi tahu Apache untuk melihat tempat yang tepat, dengan hashing direktori, dll. Misalnya, baris:
akan memberi tahu Apache untuk mengatur root dokumen ke / http / users / s / u / subdomain ketika diminta untuk subdomain.yourdomain.com
sumber
Saya pikir DNS kartu liar dengan Hosting Virtual Massa Dinamis Apache adalah solusi yang masuk akal juga. Padahal, saya belum pernah mencobanya.
Jika Anda memiliki kebutuhan untuk skala ke beberapa server atau solusi lain tidak berhasil untuk Anda, saya sarankan menggunakan server DNS berbasis database. Saya telah berhasil menggunakan MyDNS sebelumnya. Karena menggunakan MySQL (atau PostgreSQL), Anda dapat memperbarui DNS Anda dengan cepat dengan PHP atau apa saja. Kode tersebut sepertinya tidak diperbarui dalam beberapa saat, tetapi itu DNS dan oleh karena itu tidak benar-benar canggih.
sumber
Metode pembuatan subdomain karakter pengganti
Pertama, Anda harus membuat pengaturan DNS menggunakan editor DNS server Anda.
Buat
A
catatan dalam pengaturan DNS dengan*
kartu liar host di alamat ip server.* 1400 IN A ip_address
Buat sekali lagi
A
catatan dalam pengaturan DNS dengan host@
ataudomain_name.tld
di alamat ip server. tld berarti domain level teratas atau ekstensi dari domain seperti .com, .org, dll ....@ 1400 IN A ip_address
ataudomain_name.tld 1400 IN A ip_address
Buat
CNAME
catatan seperti:www 1400 IN A domainname.tld
*
pengganti seperti*.domain.tld
Buat htaccess di direktori subdomain Anda
*.domain.tld
dan masukkan kode ini:Uji subdomain wildcard pertama Anda seperti
example.domainname.tld
Jika Anda tidak tertarik untuk melewatkan data sebagai parameter menggunakan htaccess, Anda juga bisa mendapatkan datanya dengan menggunakan pengkodean berikut:
dan gunakan variabel global Anda di mana saja seperti
global $get_data
.(Catatan: Kelas ini terutama digunakan untuk mendapatkan nama subdomain yang tepat dari
http_host
. karena beberapa nama tambahan yang digabungkan sebelum subdomain Anda juga berlaku sepertiwww.example.domainname.tld
. Kembalian ini$_GET['data']='wwww'
Jadi saran saya adalah menggunakan$_SERVER['http_host']
untuk mendapatkan nilai yang tepat daripada menggunakan$_SERVER['query_string']
atau melewati parameter htaccess di halaman indeks Anda)6. Percepat eksekusi subdomain wildcard ini menggunakan N detik di TTL - DNS SETTINGS.
7. Periksa subdomain setelah waktu ttl yang Anda berikan (600 - 10 menit) seperti =>
http://abc.domain.tld
(catatan: subdomain karakter pengganti tidak menggantikan subdomain yang ada. Karena selalu prioritas pertama untuk subdomain Anda yang ada)
sumber