PDA

View Full Version : سوالی در مورد url manager (حل شد)



hooman.pro
شنبه 01 آذر 1393, 09:39 صبح
سلام تمام کار های مربوط به ایجاد ساب دامین مجازی رو انجام دادم و درست شد.
حالا یک دامنه رو به اون ساب دامین وصل کردم
یعنی اون صفحه خاص با دو آدرس www.subdomain.mydomain.com (http://www.subdomain.mydomain.com)
و www.anotherdomain.com (http://www.anotherdomain.com)
در دسترس هست.
حالا میخواهم در اون صفحه برای برخی لینک ها نه همه لینک ها به این صورت باشه که اگر از ساب دامین اومد مثلا بشه:
www.subdomain.mydomain.com/user/register (http://www.subdomain.mydomain.com/user/register)
یا برخی موارد بشه
www.mydomain.com/user/register

اما اگر از دامنه دیگری اومد اصلا حذف بشه و نمایش داده نشه و یا تو برخی موارد بشه
www.anotherdomain.com/register (http://www.anotherdomain.com/register)
یا هر چیز دیگر.
این قضیه رو از کجا میتونم واسش شرط بزارم که بفهمم از کدام دامنه اومده


هم نیاز دارم تو فایل کانفیگ مین قسمت url manager بعضی چیزا رو تنظیم کنم. هم تو خود ویو. هر دو روش رو میخوام؟؟؟؟؟؟؟؟؟

MMSHFE
شنبه 01 آذر 1393, 23:47 عصر
خوب شما وقتی اینطوری مینویسید:

array( 'http://<subdomain:\w+>.mysite.com/<controller:\w+>/<action:\w+>' => '<controller>/<action>',)
و کد اکشن رو اینطوری مینویسید:

public function actionTest($subdomain)
{
// user $subdomain here
}
توی اکشن میتونید برحسب ساب دامینی که ارسال شده، هر کاری دوست دارین انجام بدین.

hooman.pro
یک شنبه 02 آذر 1393, 19:54 عصر
استاد عزیز مثل اینکه سوالم رو متوجه نشدید. گفتم کار های ساب دامین رو درست کردم کامل و کار هم میکنه. یعنی دقیقا همین کاری که میگید رو انجام دادم.
و الان یک دامنه مجزا دیگه رو به اون ساب دامین مسئول هاست وصل کرده یعنی چه بنویسیم : www.subdomain.mysite.com
و چه بنویسی www.otherdomain.com به صفحه مورد نظر میرسم و مشکلی نیست.

مشکل اینجاست که میخواهم اگر با www.otherdomain.com اومد ظاهر متفاوت یا لینک های متفاوتی با زمانی که با www.subdomain.mysite.com آدرس اومد داشته باشم.
تشخیص بدم که از کدوم آدرس وارد شده (چون از هر دو آدرس به یک صفحه و یک محتوا میرسم) و برای هر حالت rule های متفاوتی در لینک ها یا رنگ هدر متفاوتی در سایت داشته باشم

rezaonline.net
دوشنبه 03 آذر 1393, 00:09 صبح
میتونید کلاس CBaseUrlRule رو بازنویسی کنید .

hooman.pro
دوشنبه 03 آذر 1393, 09:35 صبح
دست شما درد نکنه که پاسخ دادین، پس به صورت پیش فرض url manager چنین امکانی نداره. حالا آدرس سایت رو باید از متغییر $_server بگریم که روش شرط بزارم که اگر این بود این کارو کن و در غیر این صورت فلان کار؟

MMSHFE
دوشنبه 03 آذر 1393, 09:50 صبح
Yii::app()->request اطلاعات خیلی خوبی در اختیارتون میگذاره که از همین آرایه گرفته.

beh3000
دوشنبه 03 آذر 1393, 12:14 عصر
ببخشید وسط مکالمه تون مزاحم میشم ... این ساب دومین مجازی رو از طریق htaccess انجام بدیم بهتر نیست ؟ فک کنم سرعتش بیشتر باشه ... شما چی فکر میکنید ؟

MMSHFE
دوشنبه 03 آذر 1393, 12:49 عصر
مسئله اصلی ایجاد ساب دامین خودکار هست که با htaccess. باید دستی انجام بشه چون ویرایش این فایل بطور خودکار زیاد توصیه نمیشه و اگه اشتباهی رخ بده سایت بالا نمیاد.

beh3000
دوشنبه 03 آذر 1393, 17:47 عصر
خب کی خواست بصورت خودکار ویرایش کنه ؟؟؟ !!! :متعجب:

این یک نمونه ساب دومین مجازی با htaccess



RewriteEngine on
RewriteCond %{HTTP_HOST} ^(?:www.)?([^.]+)\.yourdomain\.com$ [NC]
RewriteRule ^.*$ newpage.php?name=%1

MMSHFE
دوشنبه 03 آذر 1393, 18:50 عصر
کلاً وقتی میخوان با WildCard DNS کار کنن هدفشون همین خودکارسازیه. برای مثال یک سیستم وبلاگدهی رو درنظر بگیرین که به همه کاربران آدرسی شبیه user.site.com میده. فکر نمیکنم خوشتون بیاد هر کاربری که وبلاگ ساخت، دستی براش htaccess. رو ویرایش کنید. تا جایی که دستی تست کردم هم بررسی این موارد توسط urlManager سریعتر انجام میشد. ازطرفی توی خیلی از هاستها تمامی امکانات htaccess. باز نیست. حتی ممکنه سرور موردنظر nginx و... باشه که کار تنظیم کردن رو سخت تر میکنه و واگذار کردن این مسئولیت به urlManager خود فریمورک قابلیت خیلی خوبیه که توی هر فریمورکی هم موجود نیست.

beh3000
دوشنبه 03 آذر 1393, 19:10 عصر
کلاً وقتی میخوان با WildCard DNS کار کنن هدفشون همین خودکارسازیه. برای مثال یک سیستم وبلاگدهی رو درنظر بگیرین که به همه کاربران آدرسی شبیه user.site.com میده. فکر نمیکنم خوشتون بیاد هر کاربری که وبلاگ ساخت، دستی براش htaccess. رو ویرایش کنید.


استاد من قبلا همین کدی که تو پست قبلی نوشتم رو تست کردم اصلا لازم نیست واسه هر وبلاگی که نوشته میشه htaccess ویرایش بشه !

در پست بالا وقتی مثلا ali.domain.com درخواست بشه محتویات این آدرس نمایش داده میشه domain.com/newpage.php?name=ali

از این نظر هم گفتم سریعتره چون قبل از اجرای php اجرا میشه اگه توی urlmanager بنویسیم اول باید یه فایل php اجرا بشه بعد میفهمه که اطلاعات وبلاگ باید بارگذاری بشه

ولی در مورد این گفته شما هم تست میکنم وقتی پروژه ام آماده شد ... از یک نظر هم احتمالا شما درست میگین چون داریم با فریمورک کد مینویسیم هر آدرسی بخواد بارگذاری بشه از urlmanager میگذره با htaccess هم بخوایم بنویسیم یه همچین چیزی باید بنویسیم که بازم urlmanager لود میشه



RewriteEngine on
RewriteCond %{HTTP_HOST} ^(?:www.)?([^.]+)\.yourdomain\.com$ [NC]
RewriteRule ^.*$ yourdomain.com/controller/action/%1


از استارتر هم عذر میخوام کلا موضوع تاپیک رو عوض کردم

MMSHFE
دوشنبه 03 آذر 1393, 19:24 عصر
مسئله همینه که همونطور که اشاره کردین، بهرحال urlManager داره بارگذاری میشه و کار میکنه و درنتیجه انتقال این کنترلها به htaccess. باعث نمیشه سرعت بیشتر بشه (چون باعث عدم پردازش urlManager و رولهای اون نمیشه). ازطرفی قابلیت اجرا روی همه سرورها با ساختار مشترک، مزیتی هست که urlManager در اختیارتون میگذاره.

beh3000
دوشنبه 03 آذر 1393, 19:28 عصر
دقیقا ... مسئله اینه که داریم با فریم ورک مینویسیم ... اگه با php خام بنویسیم با htaccess و در صورتی که با فریم ورک بنویسیم با urlmanager خود فریم ورک ... امشبم یه چیز خوب یاد گرفتم ... ایول

rezaonline.net
سه شنبه 04 آذر 1393, 11:17 صبح
برای سابدامین که آقای شهرکی خودشون عرض کردن http://barnamenevis.org/showthread.php?476580-%D8%B3%D9%88%D8%A7%D9%84%DB%8C-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-url-manager&p=2136800&viewfull=1#post2136800

برای ادد آن دامین هم اگر خواستید به راحتی با متد forward میتونید درخواست رو منتقل کنید
فرض کنید دو تا کنترلر دارید به اسم blog , main
کنترلر بلاگ برای آدرسهایی که ست شده اند لود میشه اما کنترلر main برای آدرس اصلی سایت مثلا 127.0.0.1 لود میشه .

میتونید برای متد index.php اینکارو کنید .


function actionIndex()
{
if(Yii::app()->request->hostInfo != 'http://127.0.0.1')
CController::forward('blog/index',true);
else
echo 'welcome to home page';

}

hooman.pro
پنج شنبه 06 آذر 1393, 21:36 عصر
Yii::app()->request->hostInfo
چه توی ساب دامین که sub.mysite.com باشه چه توی اون یکی دامنه که به ساب دامین داره اشاره میکنه otherdomain.com
هر دو sub.mysite.com رو نشون میدن!؟؟
چه طور بفهمم که از کدوم آدرس وارد این صفحه شدن؟؟

rezaonline.net
جمعه 07 آذر 1393, 01:19 صبح
Yii::app()->request->hostInfo
چه توی ساب دامین که sub.mysite.com باشه چه توی اون یکی دامنه که به ساب دامین داره اشاره میکنه otherdomain.com
هر دو sub.mysite.com رو نشون میدن!؟؟
چه طور بفهمم که از کدوم آدرس وارد این صفحه شدن؟؟
خب تست کن داداش گل من :)
تست کردنش خیلی سخته ؟
اگر سخته بگم مثلا توی reza.example.com باشی همینو نشون میده
توی www.reza.example.com باشی همینیو نشون میده و
کلا توی هر آدرسی باشی اونو نشون میده دیگه :)

hooman.pro
جمعه 07 آذر 1393, 09:08 صبح
خوب تست کردم که میگم هر دو sub.mysite.com رو نشون میدن دیگه، فرضیه سازی که نکردم.
ببخشید من اشتباها علامت !؟؟ گذاشتم و شما فکر کردین که دارم میپرسم که اینطوریه. اما نه داشتم میگفتم که این اتفاق افتاد و تو هر دو حالت یکی بودن

rezaonline.net
شنبه 08 آذر 1393, 12:08 عصر
خوب تست کردم که میگم هر دو sub.mysite.com رو نشون میدن دیگه، فرضیه سازی که نکردم.
یعنی شما otherdomain.com رو ست کردین روی sub.mysite.com , بعد hostInfo اومده sub,mysite.com رو نشون داده ؟؟؟!!!
این بعیده احتمالا ریدارکت کردین دامنه رو

در کل hostInfo آدرسی که توی آدرس بار هست رو نشون میده :)

شما تست کردید من کلا یه سیستم رو بر این اساس نوشتم :)
hastishop.ir

hooman.pro
یک شنبه 09 آذر 1393, 22:14 عصر
والا همین طور بود ولی تونستم از طریق متغییر
$_server['http_x_forwaded']
یه همچین اسمی بود تقریبا تشخیص بدم که از کدوم دامنه اومده

ریدایرکت هم نشده و آدرس میشه کلا آدرس دامنه ای که به ساب دامین وصل شده. البته این اتصال رو شخص دیگری که مسئول هاست هست انجام داده و من دقیق نمیدونم چی کار کرده.