ساخت ساب دامین با 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 "این صفحه وجود ندارد"; } ?>
لیست نظرات
سلام من از روش دوم استفاده کردم اما کوئری استرینگ ها خود لینک خوانده نمیشه مثلا: test.domain.com?query=1 مقدار query خوانده نمیشه راه حلش چیه؟
سلام وقت بخیر با این کد میشه سرویس وبلاگدهی زد ؟
درود ، این آموزش فقط نحوه ساخت ساب دامین برای سرویس بلاگ دهی رو آموزش میده ، و نحوه مدیریت سیستم وبلاگ به خود شما بستگی داره