子網域對應會員帳號的轉址程式及設定

延續前篇用會員帳號建立動態子網域的主機設定,接著要進行兩者對應所需的代碼修改。方法有二:其一,是用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

您可能也會喜歡…

9 個回應

  1. maxmas表示:

    請問一下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號,不知道這樣應該要怎麼設定,我修改你的設定都沒法成功,謝謝

  2. ANDY表示:

    二段意思是要取出子網域非www的變數,建議你可以去瀏覽本文的參考資料或正規式的寫法…

    你只單純說有問題,實在很難判斷,有可能主機的設定要改,有可能你的htaccess寫法寫錯,也有可能你的對應程式沒有寫好…但沒看到任何資料,都無法提供意見給你T_T

  3. maxmas38表示:

    您好,先聲您說聲抱歉,晚回應您,因為這幾天為了女兒皮膚過敏的問題,所以沒有心思處理。
    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有個缺點,這個留言是用迴響的方式,所以無法重覆發表,必須換個人名與信箱….

  4. ANDY表示:

    呃,看到這個問題,我很單純的想到的是…
    要用相對路徑,加../不就好了?
    比方說
    <img src=”2010.jpg”> 會被導至
    <img src=”MB0001/memweb/2010.jpg”>
    那改成
    <img src=”../../memweb/2010.jpg”> 就會被導至
    <img src=”memweb/2010.jpg”>
    這是相對路徑呀!

    如果這簡單的做法不是你要的,那麼比較麻煩的做法就是改寫htaccess讓它針對圖片再另外轉址,但通常還會分是要轉會員的圖片還是網站本身的圖片…

    有個做法是先把圖片都固定存放在某個目錄,再針對該目錄做轉址…

    總之不管哪個做法,得視你圖片存放方式而定…

    希望妳女兒早日擺脫過敏的問題,健康快樂,多一份祝願,多一份力量

    blog無法重覆發表有優點有缺點,通常是在限時內要重覆留言才會被阻擋,以避免垃圾留言,可能你太快做二次留言了^^”

  5. maxmas38表示:

    Andy,謝謝你的祝福….
    我把過程發表在部落格,您可以看一下,
    http://blog.udn.com/maxmas/3862209

    那樣子的作法我那時用過,好像沒用,所以才用絕對路徑,不過今天用,又可以,怪怪,到底哪裡出錯,真奇怪,就算了……^^

  6. maxmas38表示:

    對了… 我是無法再發表,因為第一次發表是3月9號用maxmas,第二次已是3月16號,所以不可能是在限時內要重覆留言被阻擋,應該是沒有註冊的關係,我用另一個maxmas38就沒這問題了,而且我也忘了以前有註冊過,我是看到我用maxams38留言後,跑出肖像圖,才知道我有註冊過,應該是在http://designdisease.com/ 註冊過吧

  7. maxmas38表示:

    Andy,另外再請問一下,如第一個留言所問,如果我想改用子網域的方式,
    例如 mb0001.domain.com 或 http://www.mb0001.domain.com 都會對應到程式 index.php?po=website&fm_data[ino]=MB0001,網址不區分大小寫,請問這樣的話,我又應該怎麼設定呢?

  8. ANDY表示:

    …我還真不知該怎麼回答你^^”
    方法一及方法二都可以達到子網域的功能,但你的提問卻出在更根本的地方…
    我想先問說你Wildcard DNS有沒有設定好?會不會用方法一來做個測試?

    在方法二所述:
    RewriteCond %{HTTP_HOST} !^www.xx.com$ [NC]
    它NC即表示不區分大小寫

    建議你搜一下htaccess的使用法及正規表示法,會比我在這裡回覆要得到更多更快^^

  9. maxmas38表示:

    Andy,謝謝你耐心的回答,
    會看到你的這篇教學,就是我搜的結果,所以我也參照過很多篇了,
    但大致上都大同小異,都是如何設虛擬網頁,或者轉址等這種簡易的,
    沒有像我這般應用的,所以參考你的回答,其它我自己再TRY看看囉,
    感恩~^o^

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *