Apache下用rewrite實現(xiàn)動態(tài)二級域名解析
山外青山樓外樓,西湖歌舞幾時休。士為知己者死,女為悅己者容。己所不欲,勿施于人。江山代有才人出,各領(lǐng)風騷數(shù)百年。Apache下用rewrite實現(xiàn)動態(tài)二級域名解析 [2006-12-27 11:00
山外青山樓外樓,西湖歌舞幾時休。士為知己者死,女為悅己者容。己所不欲,勿施于人。江山代有才人出,各領(lǐng)風騷數(shù)百年。Apache下用rewrite實現(xiàn)動態(tài)二級域名解析
[2006-12-27 11:00:05] | 技術(shù)轉(zhuǎn)貼
實現(xiàn)動態(tài)二級域名解析的一個關(guān)鍵就是,把特有的名字怎么能夠提出來,因為RewriteRule中的匹配,是不包括域名的匹配的,其實這其中就是一層窗戶紙,把域名先重寫放到“路徑”中,再對“路徑”重寫一次就可以了,也就是說加一步過渡。這樣說大概還一頭霧水,給個實例。
首先按我上次寫的文章的那個需求寫一個,假設(shè)動態(tài)解析*.iecn.cn。
注意要先做一個所謂的范域名解析,就是說把所有*.iecn.cn解析到某個IP上去,這不是本文章討論范圍就不細說了。
Apache中相關(guān)配置如下:
ServerAdmin yourmail@domain.com
DocumentRoot /YourWwwRoot/.default
ServerName all-sites
ErrorLog logs/all-sites-error_log
CustomLog logs/all-sites-access_log common
# 下面三行實現(xiàn)動態(tài)解析
RewriteCond {HTTP_HOST} ^[a-z0-9-] .iecn.cn$
RewriteRule ^/(.*)$ /{SERVER_NAME}/$1 ##注##
RewriteRule ^/([a-z0-9-] ).iecn.cn/(.*)$ /YourWwwRoot/$1/$2 [L]
# 沒有解析到的情況下扔到自己的一個PHP中做一下處理
RewriteRule ^.*$ /index.php [L]
注意我標注的地方,那一步就是一個過渡,說一下過程吧,假設(shè)現(xiàn)在訪問:
http://zhong.iecn.cn/xxx
經(jīng)第一步重寫,變成 /zhong.iecn.cn/xxx
經(jīng)第二步重寫就是 /YourWwwRoot/zhong/xxx 了,其他的操作與我行前說的基本就差不多了。
再舉一個可能更常見的實例,假設(shè)一個博客系統(tǒng),要求把
http://xxx.iecn.cn
隱式的重寫成
http://blog.iecn.cn/blog.php?u=xxx
這里面的xxx可以看做是一個用戶名,想必類似這樣的需求大家一定都見過很多了,不過多解釋了。
同意先做范域名解析這里不多說。在Apache中做如下重寫(只寫Rewrite部分了):
RewriteCond {HTTP_HOST} ^[a-z0-9-] .iecn.cn$
RewriteRule ^/?$ /{HTTP_HOST}
RewriteRule ^/([a-z0-9-] ).iecn.cn/?$ /blog.php?u=$1 [L]
zz from http://blog.iecn.net/blog.php?do=showone&tid=1013
Apache下用rewrite實現(xiàn)任意域名的動態(tài)解析
Apache的mod_rewrite模塊功能非常強大,我以后會寫更多的實例出來。
關(guān)于mod_rewrite的使用,不想多說,提供兩個相關(guān)文檔的地址:
http://w.yi.org/ftp/FAPM/apache/Apache2/zh/mod/mod_rewrite.html
http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/mod/mod_rewrite.html
如果你只是想用一個現(xiàn)成的你可以直接把我的copy過去改改,如果想從技術(shù)上搞清楚,那么首先要掌握兩方面的技術(shù):
Apache下mod_rewrite的使用(可參照我上面提供的兩個地址)
正則表達式(這是一門在很多地方都非常有用的技術(shù)