子網域對應會員帳號的轉址程式及設定
延續前篇用會員帳號建立動態子網域的主機設定,接著要進行兩者對應所需的代碼修改。方法有二:其一,是用PHP或ASP等語言寫作子網域的判斷程式;另一個,則是增加轉址的正規表達法至.htaccess中。
方法一:在網站根目錄的index.php寫判斷程式
//取得子網域 $domain = $_SERVER['SERVER_NAME']; $subdomain = substr($domain, 0, strpos($domain, '.')); //判斷子網域是否存在於會員資料庫 $member_check = mysql_query("SELECT id FROM member_temp WHERE account= '".$subdomain ."'"); //如果存在,就轉到會員頁;沒有,就轉到網站首頁 if ($member_check) @header("location:user/index.php?account=".$subdomain); else @header("location:home/index.php");
方法二:修改網站根目錄的.htaccess
//啟用網址覆寫 Options +FollowSymLinks RewriteEngine On //取出xx.com的子網域 RewriteCond %{HTTP_HOST} !^www\.xx\.com$ [NC] RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.xx\.com$ [NC] //轉址到對應的程式 RewriteRule ^$ /user/index.php?account=%2 [QSA,nc]
註:上述方法皆測試過可實行,但我也只是寫個初步導引;有需要做到會員子網域的網站系統,大多有其更細部的使用功能及流程,後續就好好各自努力囉
參考資料:
Wildcard DNS dynamic subdomain
VirtualHost Hacking with Wildcard DNS
Dynamic Sub-Domain with PHP
WMPU Subdomain rewriting with MAMP
Google : php dynamic add sub domain
請問一下ANDY:
//取出xx.com的子網域
RewriteCond %{HTTP_HOST} !^www.xx.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).xx.com$ [NC]
以上二段是何意思?有何差別?
如果我希望給會員虛擬子網域,例如AB0001.domain.com或
http://www.AB0001.domain.com,前面AB0001是會員ID號,
AB0001,AB0002~依此類推,我希望USER在瀏覽器輸入網址後,
會轉址到對應的程式index.php?po=website&fm_data[ino]=會員ID號,不知道這樣應該要怎麼設定,我修改你的設定都沒法成功,謝謝
二段意思是要取出子網域非www的變數,建議你可以去瀏覽本文的參考資料或正規式的寫法…
你只單純說有問題,實在很難判斷,有可能主機的設定要改,有可能你的htaccess寫法寫錯,也有可能你的對應程式沒有寫好…但沒看到任何資料,都無法提供意見給你T_T
您好,先聲您說聲抱歉,晚回應您,因為這幾天為了女兒皮膚過敏的問題,所以沒有心思處理。
RewriteRule ^AB([0-9]+)([0-9]+)([0-9]+)([0-9]+)\/$ index.php?po=user&id=AB$1$2$3$4
在瀏覽器上打入 http://127.0.0.1/0design/MB0001/
則USER的頁面會顯示出來… 但是所有的圖片都開不出來,
看圖片路徑變成 http://127.0.0.1/0design/MB0001/memweb/2010.jpg
正確應該是 http://127.0.0.1/0design/memweb/2010.jpg
,因為我網頁模板裡面是用相對路徑,所以前面被加上 http://127.0.0.1/0design/MB0001/,目前我只好在USER的模板頁面直接用絕對路徑解決,不知道像這樣子的方式,是否應該設定什麼,
才能正確對應目錄,而不需要用絕對路徑,謝謝。
另外Blog有個缺點,這個留言是用迴響的方式,所以無法重覆發表,必須換個人名與信箱….
呃,看到這個問題,我很單純的想到的是…
要用相對路徑,加../不就好了?
比方說
<img src=”2010.jpg”> 會被導至
<img src=”MB0001/memweb/2010.jpg”>
那改成
<img src=”../../memweb/2010.jpg”> 就會被導至
<img src=”memweb/2010.jpg”>
這是相對路徑呀!
如果這簡單的做法不是你要的,那麼比較麻煩的做法就是改寫htaccess讓它針對圖片再另外轉址,但通常還會分是要轉會員的圖片還是網站本身的圖片…
有個做法是先把圖片都固定存放在某個目錄,再針對該目錄做轉址…
總之不管哪個做法,得視你圖片存放方式而定…
希望妳女兒早日擺脫過敏的問題,健康快樂,多一份祝願,多一份力量
blog無法重覆發表有優點有缺點,通常是在限時內要重覆留言才會被阻擋,以避免垃圾留言,可能你太快做二次留言了^^”
Andy,謝謝你的祝福….
我把過程發表在部落格,您可以看一下,
http://blog.udn.com/maxmas/3862209
那樣子的作法我那時用過,好像沒用,所以才用絕對路徑,不過今天用,又可以,怪怪,到底哪裡出錯,真奇怪,就算了……^^
對了… 我是無法再發表,因為第一次發表是3月9號用maxmas,第二次已是3月16號,所以不可能是在限時內要重覆留言被阻擋,應該是沒有註冊的關係,我用另一個maxmas38就沒這問題了,而且我也忘了以前有註冊過,我是看到我用maxams38留言後,跑出肖像圖,才知道我有註冊過,應該是在http://designdisease.com/ 註冊過吧
Andy,另外再請問一下,如第一個留言所問,如果我想改用子網域的方式,
例如 mb0001.domain.com 或 http://www.mb0001.domain.com 都會對應到程式 index.php?po=website&fm_data[ino]=MB0001,網址不區分大小寫,請問這樣的話,我又應該怎麼設定呢?
…我還真不知該怎麼回答你^^”
方法一及方法二都可以達到子網域的功能,但你的提問卻出在更根本的地方…
我想先問說你Wildcard DNS有沒有設定好?會不會用方法一來做個測試?
在方法二所述:
RewriteCond %{HTTP_HOST} !^www.xx.com$ [NC]
它NC即表示不區分大小寫
建議你搜一下htaccess的使用法及正規表示法,會比我在這裡回覆要得到更多更快^^
Andy,謝謝你耐心的回答,
會看到你的這篇教學,就是我搜的結果,所以我也參照過很多篇了,
但大致上都大同小異,都是如何設虛擬網頁,或者轉址等這種簡易的,
沒有像我這般應用的,所以參考你的回答,其它我自己再TRY看看囉,
感恩~^o^