PDA

View Full Version : امکان اتصال دامنه شخصی کاربر به صفحه شخصی



mohammad-gh
دوشنبه 03 تیر 1392, 09:50 صبح
با سلام
سایتی دارم که تقریبا مانند یک سیستم وب لاگ دهی به کاربران صفحه شخصی می دهد
می خواهم به کاربران این امکان را بدهم که برای خود دامنه ثبت کرده و آنرا به صفحه شخصی خود در سایت من وصل کنند, دقیقا همان کاری که سیستمهای وب لاگ دهی مثل بلاگفا و .... انجام می دهند

این مورد هم مهم است که من نمی خوام هنگام زدن ادرس دامنه ای که کاربر ثبت کرده صفحه انتقال پیدا کند به ادرس ،بلکه می خوام تو همون ادرس دامنه این رو نشون بدهد
مثلا یا زدن ادرس www.test.com (http://www.test.com)
محتویات ادرس http://mycityjobs.ir/viewprofile.php?id=301 (http://mycityjobs.ir/viewprofile.php?id=301)
رو نشون بده !
می خواستم بدونم این کار به چه صورتی انجام می گیرد و چه مواردی برای ان نیاز است !

با تشکر, منتظر راهنمایی دوستان هستم

amin7x
دوشنبه 03 تیر 1392, 13:20 عصر
سلام
شما میتونی برای راحت تر شدن کارت به این صورت عمل کنی :

www.mysite.com/username.php?user=admin

بعد با htaccess میتونی اون رو به صورت :

www.admin.mysite.com

واسه سوالت هم من یه کد پیدا کردم ولی هیچ تضمینی نمیدونم که امنیتش خوبه یا کار میکنه :



<?php

################################################## #############
# cPanel Subdomains Creator 1.1
################################################## #############
# Visit http://www.zubrag.com/scripts/ for updates
################################################## #############
#
# Can be used in 3 ways:
# 1. just open script in browser and fill the form
# 2. pass all info via url and form will not appear
# Sample: cpanel_subdomains.php?cpaneluser=USER&cpanelpass=PASSWORD&domain=DOMAIN&subdomain=SUBDOMAIN
# 3. list subdomains in file. In this case you must provide all the defaults below
#
# Note: you can omit any parameter, except "subdomain".
# When omitted, default value specified below will be taken
################################################## #############

// cpanel user
define('CPANELUSER','user');

// cpanel password
define('CPANELPASS','pass');

// name of the subdomains list file.
// file format may be 1 column or 2 columns divided with semicilon (;)
// Example for two columns:
// rootdomain1;subdomain1
// rootdomain1;subdomain2
// Example for one columns:
// subdomain1
// subdomain2
define('INPUT_FILE','domains.txt');

// cPanel skin (mainly "x")
// Check http://www.zubrag.com/articles/determine-cpanel-skin.php
// to know it for sure
define('CPANEL_SKIN','x');

// Default domain (subdomains will be created for this domain)
// Will be used if not passed via parameter and not set in subdomains file
define('DOMAIN','');


/////////////// END OF INITIAL SETTINGS ////////////////////////
////////////////////////////////////////////////////////////////

function getVar($name, $def = '') {
if (isset($_REQUEST[$name]) && ($_REQUEST[$name] != ''))
return $_REQUEST[$name];
else
return $def;
}

$cpaneluser=getVar('cpaneluser', CPANELUSER);
$cpanelpass=getVar('cpanelpass', CPANELPASS);
$cpanel_skin = getVar('cpanelskin', CPANEL_SKIN);

if (isset($_REQUEST["subdomain"])) {
// get parameters passed via URL or form, emulate string from file
$doms = array( getVar('domain', DOMAIN) . ";" . $_REQUEST["subdomain"]);
if (getVar('domain', DOMAIN) == '') die("You must specify domain name");
}
else {
// open file with domains list
$doms = @file(INPUT_FILE);
if (!$doms) {
// file does not exist, show input form
echo "
Cannot find input file with subdomains information. It is ok if you are not creating subdomains from file.<br>
Tip: leave field empty to use default value you have specified in the script's code.<br>
<form method='post'>
Subdomain:<input name='subdomain'><br>
Domain:<input name='domain'><br>
cPanel User:<input name='cpaneluser'><br>
cPanel Password:<input name='cpanelpass'><br>
cPanel Skin:<input name='cpanelskin'><br>
<input type='submit' value='Create Subdomain' style='border:1px solid black'>
</form>";
die();
}
}

// create subdomain
function subd($host,$port,$ownername,$passw,$request) {

$sock = fsockopen('localhost',2082);
if(!$sock) {
print('Socket error');
exit();
}

$authstr = "$ownername:$passw";
$pass = base64_encode($authstr);
$in = "GET $request\r\n";
$in .= "HTTP/1.0\r\n";
$in .= "Host:$host\r\n";
$in .= "Authorization: Basic $pass\r\n";
$in .= "\r\n";

fputs($sock, $in);
while (!feof($sock)) {
$result .= fgets ($sock,128);
}
fclose( $sock );

return $result;
}

foreach($doms as $dom) {
$lines = explode(';',$dom);
if (count($lines) == 2) {
// domain and subdomain passed
$domain = trim($lines[0]);
$subd = trim($lines[1]);
}
else {
// only subdomain passed
$domain = getVar('domain', DOMAIN);
$subd = trim($lines[0]);
}
// http://[domainhere]:2082/frontend/x/subdomain/doadddomain.html?domain=[subdomain here]&rootdomain=[domain here]
$request = "/frontend/$cpanel_skin/subdomain/doadddomain.html?rootdomain=$domain&domain=$subd";
$result = subd('localhost',2082,$cpaneluser,$cpanelpass,$req uest);
$show = strip_tags($result);
echo $show;
}

?>


راستی کد برای برای Cpanel هستش.

mohammad-gh
پنج شنبه 06 تیر 1392, 15:24 عصر
ممنون از شما

شما میتونی برای راحت تر شدن کارت به این صورت عمل کنی
در سایت ما به همین صورت است
مثلا : http://mycityjobs.ir/viewprofile.php?id=301

ولی نمی دونم کدی رو که دادید و مربوط به سی پنل است کجا استفاده کنم و به چه صورتی
اگر ممکن است فایل این کد رو یا یه نوع دیگر رو بزارید چون با ادیتور برنامه نویس ادم کد های نوشته خودش رو هم نمی تونه بخونه چه برسه به ....

arta.nasiri
پنج شنبه 06 تیر 1392, 18:16 عصر
سلام

شما ابتدا باید از کاربر درخواست کنید که دامنه ای را که ثبت کرده است را به سایت شما به اصطلاح Redirect کند ( اگه سرور اختصاصی ندارید ) سپس شما با استفاده از htaccess کاری میکنید که کلیه درخواست ها البته بجز آدرس خود سایت رو به صفحه ای مثل user.php منتقل کنه ، سپس تو این صفحه بررسی های لازم جهت شناسایی دامنه را انجام میدید که تشخیص بدید اطلاعات کدام کاربر رو باید بارگذاری کنید

kartuf
جمعه 07 تیر 1392, 02:42 صبح
شما برای انجام این کار نیاز به api های cpanel darid و همچنین هاست شما باید قابلیت پارک دامین بی نهایت داشته باشد

mohammad-gh
جمعه 07 تیر 1392, 09:46 صبح
با تشکر

دامنه ای را که ثبت کرده است را به سایت شما به اصطلاح Redirect کند
اگر منظورتون تنظیم دی ان اس است ، یله این کار را انجام میدهند

سپس شما با استفاده از htaccess کاری میکنید که کلیه درخواست ها البته بجز آدرس خود سایت رو به صفحه ای مثل user.php منتقل کنه
با چه دستوری ؟
در ضمن فعلا هاست سی پنل است و اختصاصی نیست و همچنین امکان پارک بی نهایت دامنه را دارد


شما برای انجام این کار نیاز به api های cpanel darid
میشه بیشتر توضیح دهید!

mohammad-gh
جمعه 07 تیر 1392, 10:27 صبح
این مورد هم مهم است که من نمی خوام هنگام زدن ادرس دامنه ای که کاربر ثبت کرده صفحه انتقال پیدا کند به ادرس ،بلکه می خوام تو همون ادرس دامنه این رو نشون بدهد
مثلا یا زدن ادرس www.test.com (http://www.test.com/)
محتویات ادرس http://mycityjobs.ir/viewprofile.php?id=301 (http://mycityjobs.ir/viewprofile.php?id=301)
رو نشون بده !

arta.nasiri
جمعه 07 تیر 1392, 13:41 عصر
این مورد هم مهم است که من نمی خوام هنگام زدن ادرس دامنه ای که کاربر ثبت کرده صفحه انتقال پیدا کند به ادرس ،بلکه می خوام تو همون ادرس دامنه این رو نشون بدهد
مثلا یا زدن ادرس www.test.com (http://www.test.com/)
محتویات ادرس http://mycityjobs.ir/viewprofile.php?id=301 (http://mycityjobs.ir/viewprofile.php?id=301)
رو نشون بده !

همون روشی که گفتم، شما اگر از هاست اشتراکی استفاده میکنید باید یک IP اختصاصی بگیرید سپس این IP رو در اختیار کاربراتون قرار بدید تا روی دامنه ای که ثبت کرده اند ست کنند، در اینصورت هر دامنه ای که IP شما رو اون ست شده باشه منتقل میشه به هاست شما ( یعنی وقتی تو مرورگر اسم دامنه زده میشه وب سایت شما لود میشه ). حالا شما تو صفحه index یا هرجا که دلتون خواست مقدار متغیر

$_SERVER['HTTP_HOST']
را بررسی میکنید در صورتی که این مقدار در دیتابیس بود اطلاعات مربوط به اون کاربر رو نمایش میدید بدون اینکه آدرس واقعی کاربر نشون داده بشه!

این روش نیازی به CP یا موارد دیگه نداره و ساده ترین راه هم همینه

rezaonline.net
جمعه 07 تیر 1392, 19:59 عصر
همون روشی که گفتم، شما اگر از هاست اشتراکی استفاده میکنید باید یک IP اختصاصی بگیرید سپس این IP رو در اختیار کاربراتون قرار بدید تا روی دامنه ای که ثبت کرده اند ست کنند، در اینصورت هر دامنه ای که IP شما رو اون ست شده باشه منتقل میشه به هاست شما ( یعنی وقتی تو مرورگر اسم دامنه زده میشه وب سایت شما لود میشه ). حالا شما تو صفحه index یا هرجا که دلتون خواست مقدار متغیر

$_SERVER['HTTP_HOST']
را بررسی میکنید در صورتی که این مقدار در دیتابیس بود اطلاعات مربوط به اون کاربر رو نمایش میدید بدون اینکه آدرس واقعی کاربر نشون داده بشه!

این روش نیازی به CP یا موارد دیگه نداره و ساده ترین راه هم همینه
آیا این روش رو تست کردید ؟
چه طوری آی پی رو روی دامین ست میکنید ؟
تنها راه حلش ست کردن DNS هست که اونم اگر روی سرور برای اون دامنه ای که میخواید استفاده بشه یک zone نداشته باشید و سرویس bind شناسایی نکنه ، غیرقابل تشخیص هست .
فکر کنم چیزی که شما میگید از نظر تئوری درست هم اما قابل اجرا نیست .

arta.nasiri
جمعه 07 تیر 1392, 21:30 عصر
آیا این روش رو تست کردید ؟
چه طوری آی پی رو روی دامین ست میکنید ؟
تنها راه حلش ست کردن DNS هست که اونم اگر روی سرور برای اون دامنه ای که میخواید استفاده بشه یک zone نداشته باشید و سرویس bind شناسایی نکنه ، غیرقابل تشخیص هست .
فکر کنم چیزی که شما میگید از نظر تئوری درست هم اما قابل اجرا نیست .

بله این روش تست شده است.
شما اگر به کنترل پنل دامنه دسترسی داشته باشید میتونید با ایجاد یک A Record مراحلی که گفتم رو پیاده کنید ( البته بالا هم تاکید کردم که باید IP اختصاصی داشته باشید )

mohammad-gh
شنبه 08 تیر 1392, 07:18 صبح
منظورتو ن رو از IP اختصاصی نمی دونم چیه؟؟ مگر نه اینکه هر سروری با یک ای پی شناخته شده کار میکنه
سوال بعدی اینکه روشی که گفتید چه فذقی با دی ان اس داره
خوب یدفعه به کاربرها بگیم روی دی ان اس ست کنند تا همه سایت ما رو نشون بده و وقتی سایت ما لود شد بریم با
$_SERVER['HTTP_HOST']
بررسی کنیم و ....
میشه در مورد A Record کمی توضیح بدید ! ممنون از راهنماییتون

mohammad-gh
شنبه 08 تیر 1392, 15:43 عصر
با سلام
من تا حدی روی A Record تحقیق کردم و تا جایی که فهمیدم برای انتقال یک ساب دومین به هاست دیگر است
حالا اگر روش کار اینطور است لطفا کمی بیشتر توضیح دهید !

arta.nasiri
شنبه 08 تیر 1392, 15:55 عصر
منظورتو ن رو از IP اختصاصی نمی دونم چیه؟؟ مگر نه اینکه هر سروری با یک ای پی شناخته شده کار میکنه
سوال بعدی اینکه روشی که گفتید چه فذقی با دی ان اس داره
خوب یدفعه به کاربرها بگیم روی دی ان اس ست کنند تا همه سایت ما رو نشون بده و وقتی سایت ما لود شد بریم با
$_SERVER['HTTP_HOST']
بررسی کنیم و ....
میشه در مورد A Record کمی توضیح بدید ! ممنون از راهنماییتون

سلام

اگر از هاست اشتراکی استفاده میکنید معمولا همه هاستهایی که روی سرور قرار دارند دارای یک IP اشتراکی هستند، واسه همین گفتم که اگه خواستید از هاست به جای سرور اختصاصی استفاده کنید باید یک IP اختصاصی روی هاستتون ست کنید.

تو این روش وقتی شما بر روی دامنه مورد نظر یک A record یا همون Address record ایجاد میکنید و IP آدرس سرور مورد نظرتون رو وارد میکنید دامنه یا Hostname مپ میشه رو IP که همین کار باعث میشه وقتی کاربر اسم دامنه را در مرورگر خود وارد میکند منتقل شود به سرور شما.
ولی میتونید از CNAME هم واسه این کار استفاده کنید که در روش دیگه نیازی نیست کاربر IP آدرس وارد کند و فقط آدرس دامنه شما رو وارد میکنه، این روش هم مثل روش قبل کار میکنه.
حالا مسئله اینجاست که اگه شما DNS رو در اختیار کاربر قرار بدین و خودتون هم از هاست اشتراکی استفاده کنید در اینصورت مجبورید دامنه های کاربران رو در کنترل پنل خود وارد کنید که اگه تعداد کابراتون زیاد بشه کار معقولی به نظر نمیرسه. یا واسه خودتون DNS اختصاصی داشته باشید.

در مورد A record هم میشه گفت یک نوع رکوردی هست که آدرس دامنه یا Hostname رو مپ میکنه رو IPv4

mohammad-gh
شنبه 08 تیر 1392, 16:02 عصر
در فاز اول این طرح روی هاست اشتراکی اجرا میشه پس خودمون دی ان اس ها رو به کاربرهای میدیم تا دامنه ها رو ست کنند و خودمون بعد از ست شدن میایم واون رو پارک می کنیم روی هاست
حالا در مورد باقی کار اگر راهنمایی کنید خیلی ممنون میشم!
البته اگر تا اینجای کار مشکلی نداشته باشه!

mohammad-gh
سه شنبه 11 تیر 1392, 01:10 صبح
کسی یه کد اجرایی نداره بده به ما ، کارمون لنگ همینه!

parandweb
سه شنبه 11 تیر 1392, 01:31 صبح
سلام دوست خوبم من دانش خاصی ندارم که بتونم راهنماییتون کنم اما یه پیشنهاد بهتون می دم به سایت http://payline.ir سر بزنید و عضو شوید به قسمت فروشگاه کارت شارژ بروید و فروشگاه را فعال کنید سپس به بخش


انتقال فروشگاه به سایت (http://payline.ir/user/charge-website)

مراجعه کنید یه کدی شبی به این
<?php echo file_get_contents('http://charge.payline.ir/shop-****1'); ?>
به کاربرانش میده که اگر توی سایتشون قرار بدهند فروشگاه کارت شارژشون رو نمایش می دهد به خیالم شما باید دنبال یه همچنین چیزی باشید


امیدوارم به کارتون بیادش این توضیحات من...!

arta.nasiri
سه شنبه 11 تیر 1392, 01:46 صبح
کسی یه کد اجرایی نداره بده به ما ، کارمون لنگ همینه!

تا کدوم مرحله پیش رفتین ؟ کجای کار گیر کردین ؟

شما باید واسه کاربرا این اجازه رو بدید که تو کنترل پنل خود بتونن دامنه را ثبت کنن سپس دامنه ای که کاربر ثبت کرده است را پارک میکنید ( تا اینجای کار که فقط دستورات SQL هست که اسم دامنه را از کاربر میگیرد و در جدول مریوط به خودش ذخیره میکند ). حال شما با استفاده از متغیر سراسری $_SERVER['HTTP_HOST'] آدرس رو با دامنه های ثبت شده در جدول مقایسه میکنید و اگر آدرس تو جدول موجود بود شروع به انجام عملیات واکشی اطلاعات کاربر میکنید.

mohammad-gh
چهارشنبه 12 تیر 1392, 06:53 صبح
راستش رو خواهید تا اینجای کا رو اومدم که
کاربر دامنه ای رو تو پنلش ثبت و درخواست می کنه تا اون رو پارک کنیم
سپس توسط همون دستور $_SERVER['HTTP_HOST']; تشخیص داده میشه که به کجا باید هدایت بشه

اما همین هدایت مهمه
چون نمی دونم که چطور باید این کار را انجام داد مثلا اطلاعاتش رو include کنیم یا دایرکت کنیم و ...

من یه تستی زدم روی سایت خودم الان با sana-net.ir سایت عادی میاد بالا ولی با sana-net.com همون کاری که می خواهیم
با include این کار رو کردم که به نظرم درست نیست
خواستم با header("location:test.php"); کار کنم که اون هم درست در نیومدو کار نکرد

arta.nasiri
چهارشنبه 12 تیر 1392, 15:58 عصر
راستش رو خواهید تا اینجای کا رو اومدم که
کاربر دامنه ای رو تو پنلش ثبت و درخواست می کنه تا اون رو پارک کنیم
سپس توسط همون دستور $_SERVER['HTTP_HOST']; تشخیص داده میشه که به کجا باید هدایت بشه

اما همین هدایت مهمه
چون نمی دونم که چطور باید این کار را انجام داد مثلا اطلاعاتش رو include کنیم یا دایرکت کنیم و ...

من یه تستی زدم روی سایت خودم الان با sana-net.ir سایت عادی میاد بالا ولی با sana-net.com همون کاری که می خواهیم
با include این کار رو کردم که به نظرم درست نیست
خواستم با header("location:test.php"); کار کنم که اون هم درست در نیومدو کار نکرد

خب این بستگی به خودتون داره و اطلاعاتتون در این زمینه که بدونین کدوم روش کم هزینه و بهینه است.

اگه سیستم وبلاگ دهی راه اندازی کرده اید، پیشنهاد من اینه که شما پس از شناسایی کاربر، username رو پاس بدین به یک کلاس یا تابعی که عملیات واکشی اطلاعات رو براتون انجام بده سپس مقدار برگشتی رو با دستورات replace در جای خود قرار داده و خروجی نهایی رو بدست بیارید.

ولی شدیدا پیشنهاد میکنم از کلاس برای اینکار استفاده کنید