23.10.2009

Altan Tanrıverdi | Popüler, Yazılım | 5 yorum

Otomatik Subdomain Yaratma

Otomatik Subdomain Yaratma

Subdomain yaratma konusunda gelen taleplere cevaben hazırladığım kısa notları paylaşayım.

İlk olarak .htaccess ile çözüm: Bu tür çözümü yönlendirmeler için kullanıyoruz. Aslında yarattığımız bir subdomain bulunmuyor:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^\.]+)\.site\.net$ [NC]
RewriteCond %1 !^(www|ftp|mail)$ [NC]
RewriteRule ^.*$ http://www.site.net/profil.php?kullaniciadi=%1 [R,L]

Bu kod ile örneğin http://altan.site.com adresine gelecek talep, http://www.site.net/profil.php?kullaniciadi=altan adresine yönlendirilecektir. Böylece uzun ve şık durmayan urllerden kurtulmuş olacağız. Not: wildcard DNS host servisiniz tarafından aktif edilmiş olmalıdır. ^(www|ftp|mail) ifadeside yönlendirilmeyecek gerçek subdomainleri yazacağınız bölüm.

İkici yolumuz PHP. Sadece cPanel kullanılan sistemlerde çalışır. Bu kod ile hem subdomaini yaratıyor hemde public_html (veya www) klasörümüzde subdomain ile aynı ada sahip bir klasör yaratıyoruz. Subdomain de bu klasöre otomatik yönlendirilmiş oluyor.

// Yaratılacak altalanadları (subdomainler)
$altalan_dizi = array('istanbul', 'ankara', 'izmir', 'adana', 'mersin');

// Url
$url = "site.com";

// cPanel Bilgileri
$kullanici_adi = 'kullanici';
$parola = 'parola';
$sablon = 'rvblue';

Türkçe cpaneller genelde rvblue’dür ancak ingilizce ise genellikle x veya x3 kullanılır. Tam olarak öğrenmek için cPanelinize giriniz ve urlde frontend/ ifadesinden sonra ne yazdığına bakınız. Koda devam edelim:

foreach($altalan_dizi as $altalan) {
$talep = "/frontend/$sablon/subdomain/doadddomain.html?domain=$altalan&rootdomain=$url";
$sonuc = yarat($kullanici_adi,$parola,$talep);
echo $goster = strip_tags($sonuc);
}

Scriptlerinizde echo yaptırmayın. Çalışıp çalışmadığının kontrolü için eklendi. Koda devam edelim:

function yarat($xkullanici_adi,$xparola,$xtalep) {
$soket = fsockopen('localhost',2082);   if(!$soket) {
print('Soket hatası');
exit();
}

$yetki = "$xkullanici_adi:$xparola";
$sifre = base64_encode($yetki);
$basla = "GET $xtalep\r\n";
$basla .= "HTTP/1.0\r\n";
$basla .= "Host:localhost\r\n";
$basla .= "Authorization: Basic $sifre\r\n";
$basla .= "\r\n";
fputs($soket, $basla);
while (!feof($soket)) {
$xsonuc .= fgets ($soket,128);
}
fclose($soket);
return $xsonuc;
}

Herşey yolunda gittiyse aşağıdakine benzer bir çıktı almış olmalısınız:

Subdomain çıktısı

Kontrol edelim:

Altalanadları başarıyla yaratıldı

Görüldüğü gibi altalanadları başarıyla yaratılmış durumda.

HATALAR ve ANLAMLARI:

HTTP/1.1 401 Access Denied Still Working WWW-Authenticate: Basic realm="cPanel" Connection: close Set-Cookie: logintheme=cpanel; path=/ Set-Cookie: cprelogin=no; path=/ Set-Cookie: cpsession=closed; path=/ Server: cpsrvd/11.24 Content-type: text/html cPanel® 11 Login   Username Password © cPanel, Inc. 2006-2008

Yukarıdakine benzer hata alıyorsanız; cPanel kullanıcı adınızı veya parolanızı yanlış girdiniz demektir.

Warning: fsockopen() [function.fsockopen]: unable to connect to localhost:2082 (Connection refused) in /var/www/subdomain.php on line 21
Soket hatası

yukarıdakine benzer hata alıyorsanız; host adını veya port numarasını yanlış girdiniz demektir.

HTTP/1.1 404 Not Found Server: cpsrvd/11.24 Connection: close Content-type: text/html 404 Not Found Not Found The server was not able to find the document (./ ) you requested. Please check the url and try again. You might also want to report this error to your web hosting provider. cpaneld/11.24 Server at localhost

Yukarıdakine benzer hata alıyorsanız; host adını veya şablon adını (rvblue, x, x3) yanlış girmişsiniz demektir.

Kodu indirmek için tıklayınız!

  1. hocam benim de çok iyi bir projem var ama bu wildcard ayarları icin hosting sirketleri hosting kadar para istiyor..ücretsiz yapan bir yer tanıyormusunuz?

    • Altan Tanrıverdi diyor ki:

      Göreceli büyük projelerde sunucu yönetiminin sizde olması gerekir. Paylaşımlı host ve/ya vps gibi sistemlerde wildcard dolayısıyla subdomain vs. kısıtlaması olabiliyor. Açıkcası dedicated/co-location harici bunun ücretsiz sunulacağını sanmıyorum.

      Bu konuda hostbul.net gibi ortamlar yardımcı olabilir.

  2. evet ama açıkcası ilk aylar bir hostta başlamayı düşünüyordum malumunuz fazla trafik olmuyor..tutması garanti degil vs :) bir de sunucu kiralamayalım

  3. bu arada bir arkadaşım hostgatoru onerdi sunucu icin öneriniz var mı?

    • Altan Tanrıverdi diyor ki:

      Siteniz biraz popüler olmaya başladığında inode problemi yaşarsınız. Özel olarak bir yer tavsiye edemem ama herhangi bir hosting firmasını incelediğinizde “…. sucks” diye aramanız o firma hakkında olumsuz görüşlere ulaşmanızı sağlar.

Cevap gönder