ساخت ساب دامین با php مشابه سیستم وبلاگ دهی

ساخت ساب دامین با php مشابه سیستم وبلاگ دهی

ساب دامین با php – در این آموزش با کمک php و ابزار های دیگری که cpanel به ما ارائه می دهد با 2 روش کاربردی و کار آمد subdomain یا زیر دامنه را به صورت خودکار و با کمک پی اچ پی می سازیم .

توصیه می شود که حتما ویدیوی آموزشی زیر جهت یادگیری مشاهده نمایید .


ویدیوی subdomain با php

لینک مشاهده YouTube .


روش اول : استفاده از Api ( غیر رسمی ) سی پنل جهت ساخت Subdomain

همانطور که در ویدیوی بالا توضیح داده شده این روش احتمال اینکه در آینده به درستی کار نکند را دارد اما خوبی که این روش دارا هست .
برای subdomain یک پوشه اختصاصی را دارد . مثلا اگر من 2 ساب دامین داشته باشم و بخواهم در اولین از cms دروپال استفاده کنم و در دومی از دیتالایف ، این مورد امکان پذیر هست . البته در روش دوم هم این امکان وجود دارد اما به انعطاف پذیری این روش نیست .

فایل index.php جهت ارتباط با cpanel و ساخت subdomain

بخش home/rapidcod/public_html/ که شامل rapidcode هست را باید با توجه مسیر خود تغییر دهید .

<?php
 
define("CPN_USER", "نام کاربری سی پنل");
define("CPN_PASS", "رمز عبور سی پنل");
define("CPN_ROOT_HTTP", "آدرس لاگین به سی پنل");
 
$GLOBALS['url_list'] = parse_url(CPN_ROOT_HTTP);
define("CPN_HOST" , $GLOBALS['url_list']['host']);
define("CPN_DOMAIN" , $GLOBALS['url_list']['scheme'] . "://" . $GLOBALS['url_list']['host']);
 
date_default_timezone_set("Asia/Tehran");
 
function requestGet(string $url, array $body_list = [])
{
    $body = http_build_query($body_list);
    
    $result = file_get_contents("{$url}?{$body}");
 
    return $result;
}
 
function requestPost(string $url, array $body_list = [])
{
    $body = http_build_query($body_list);
    $body_length = strlen($body);
 
    $session_cookie = "";
 
    if(isset($GLOBALS["session"])){
        $session_cookie = "Cookie: {$GLOBALS["session"]}\r\n";
    }
 
    $opts = array(
        'http' =>
        array(
            'method'  => 'POST',
            'header'  => "Content-Type: application/x-www-form-urlencoded\r\n" . "Content-Length: {$body_length}\r\n" . $session_cookie,
            'content' => $body,
            'timeout' => 60
        )
    );
 
    $context  = stream_context_create($opts);
    $result = file_get_contents($url, false, $context);
 
    if ($result){
        $headers = $http_response_header;
        $cookie_session = null;
 
        foreach($headers as $hnd){
            if(is_int(strpos($hnd , "Set-Cookie: cpsession"))){
                $hnd = str_replace("Set-Cookie: " , "" , $hnd);
                $cookie_session = trim((explode(";" , $hnd))[0]);
 
                $GLOBALS["session"] = $cookie_session;
 
                break;
            }
        }
 
        $result = json_decode($result, true);
    } 
 
    return $result;
}
 
function getToken()
{
 
    if(isset($GLOBALS['token'])) return $GLOBALS['token'];
 
    $res = requestPost(CPN_ROOT_HTTP . "/login/?login_only=1", [
        "user" => CPN_USER,
        "pass" => CPN_PASS,
        "goto_uri" => "/"
    ]);
     
    $token =!empty($res['security_token']) ? $res['security_token'] : false;
 
    if($token){
        $GLOBALS['token'] = $token;
    }
 
    return $token;
}
 
function get_token_domain($token){
    return CPN_ROOT_HTTP . $token;
}
 
function create_sub_domain($domain_prefix)
{
 
    $token = getToken();
 
    if(!$token) return "invalid token";
 
    $url = get_token_domain($token) . "/json-api/cpanel";
 
    $new_dir = "{$domain_prefix}." . CPN_HOST;
 
    $body = [
        "cpanel_jsonapi_apiversion" => 2,
        "cpanel_jsonapi_module" => "SubDomain",
        "cpanel_jsonapi_func" => "addsubdomain",
        "domain" => $domain_prefix,
        "rootdomain" => CPN_HOST,
        "canoff" => 1,
        "disallowdot" => 0,
        "dir" => "/home/rapidcod/public_html/{$new_dir}",
    ];
 
    $res = requestPost($url, $body);
 
    $res['passed_data'] = [
        "fullname" => $domain_prefix,
        "created_date" => date("Y-m-d H:i:s"),
        "dir" => $new_dir,
    ];
 
    return $res;
}
 
function active_ssl_domain($token , $dir){
    $url = get_token_domain($token) . "/execute/SSL/toggle_ssl_redirect_for_domains";
 
    $res = requestPost($url , [
        "state" => 1,
        "domains" => $dir,
    ]);
 
    return $res;
 
}
 
 
$res = create_sub_domain("armanx");
 
$resMessage = $res['cpanelresult']['data'][0]['reason'] ?? false;
 
if(!empty($resMessage)){
    echo $resMessage;
     
    $create_res = requestGet(CPN_DOMAIN . "/welcome.php" , [
        "fullname" =>  $res['passed_data']['fullname'],
        "created_date" =>  $res['passed_data']['created_date'],
        "dir" =>  $res['passed_data']['dir'],
    ]);
 
    // force https
    active_ssl_domain(getToken() , $res['passed_data']['dir']);
 
    echo $create_res;
 
}


فایل welcome.php ( ساخت فایل خوش آمد گویی در subdomain تازه ساخته شده )

1- دقت داشته باشید که این فایل باید در Root دامنه اصلی تان باشد .
2- از آنجایی که این فایل هیچ سطح دسترسی ندارد به شدت توصیه می شود که دسترسی آن محدود به admin شود تا از خطرات امنیتی احتمالی جلوگیری گردد .

<?php 

function create_welcome_page($fullname , $created_date , $dir){
    $str = "<!doctype html>
    <html lang=\"fa\" dir=\"rtl\">
      <head>
        <title>خوش آمدی {$fullname} عزیز</title>
      </head>
      <body>
        <h1>وبسایت : {$fullname}</h1>
        <p>اگر داری این صفحه روی می بینی یعنی اینکه وبسایت تو به تازگی ساخته شده</p>
        <span>تاریخ ساخت : <time dir=\"ltr\">{$created_date}</time></span>
        </body>
    </html>";

    $create_dir = $dir . "/index.php";

    file_put_contents($create_dir , $str);

    $data = [
        "create_dir" => $create_dir,
    ];

    return $data;
}

$fullname = @$_GET['fullname'];
$created_date = @$_GET['created_date'];
$dir = @$_GET['dir'];

$status = "fail";

if(file_exists($dir)){
    $res = create_welcome_page($fullname , $created_date , $dir);
    $status = "Success\nAddress : https://{$dir}";
}

die($status);


?>


روش دوم : استفاده از wild card و htaccess جهت ساخت subdomain

وارد پوشه ساب دامنه تان شوید که معمولا با پیشوند _wildcard_ می باشد و 2 فایلی که در zip با نام wild_card.zip وجود دارد را در مسیری که وارد شدید استخراج کنید .

تنظیم htaccess

به جای rapidcode.ir دامنه اصلی خود را وارد کنید .

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ^www.rapidcode.ir
RewriteRule (.*) https://rapidcode.ir/$1 [R=301,L]

RewriteRule ^([aA-zZ])$ index.php?site_name=$1
RewriteCond %{HTTP_HOST} ^(^.*)\.rapidcode.ir
RewriteRule (.*) index.php?site_name=%1


فایل index.php جهت دریافت پیشوند ساب دامنه

<?php

$prefix = @$_GET['site_name'];

$exists_list = ["armanz" , "armanx" , "mozhgan"];

if(in_array($prefix , $exists_list)){
    
    echo "خوش آمدی {$prefix}";
}else{
    
echo "این صفحه وجود ندارد";
    
}

?>


دانلود سورس ساب دامین با php

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

لیست نظرات

  1. امیر
    امیر

    سلام من از روش دوم استفاده کردم اما کوئری استرینگ ها خود لینک خوانده نمیشه مثلا: test.domain.com?query=1 مقدار query خوانده نمیشه راه حلش چیه؟

    10 بهمن 1402 | 17:08:19
  • حسین باقری
    حسین باقری

    parse_str(parse_url('test.domain.com?query=1')['query'], $abc)
    الان متغیر abc قابل استفاده هست
    10 بهمن 1402 | 17:28:15
  • behzad
    behzad

    سلام وقت بخیر با این کد میشه سرویس وبلاگدهی زد ؟

    13 فروردین 1402 | 20:22:32
    • حسین باقری
      حسین باقری

      درود ، این آموزش فقط نحوه ساخت ساب دامین برای سرویس بلاگ دهی رو آموزش میده ، و نحوه مدیریت سیستم وبلاگ به خود شما بستگی داره

      13 فروردین 1402 | 20:52:31
    contact us