泛域名就是我們平常指的二級和三級域名等,這里我們來總結(jié)一下nginx中泛域名解析配置的實例教程,包括正則匹配等細(xì)節(jié)的講解
原本準(zhǔn)備換linux服務(wù)器,所以數(shù)據(jù)遷移暫時需要使用靜態(tài)頁面臨時代替一下,之前的article.asp?id=xxx都要重定向到靜態(tài)文件 article/xxx.htm,nginx的rewrite比apache的強(qiáng)大很多,還可以用if語句,很容易理解,下面看看nginx是如何進(jìn)行rewrite的!
提示:以下rewrite指令寫在 nginx.conf 配置的 server { … } 中
最常見的: 靜態(tài)地址重定向到帶參數(shù)的動態(tài)地址
rewrite ^(.*)/service/(.*)/.html$ $1/service.php?sid=$2 permanent;反過來: 帶參數(shù)的動態(tài)地址重定向到靜態(tài)地址
if ($query_string ~* id=(.*)) {
set $id $1;
rewrite ^(.*)/article.asp$ $1/article/$id.htm last;
}泛域名
假設(shè)這里網(wǎng)站的目錄結(jié)構(gòu)為
html
├── bbs
└── www
html為nginx的安裝目錄下默認(rèn)的存放源代碼的路徑。
bbs為論壇程序源代碼路徑
www為主頁程序源代碼路徑
把相應(yīng)程序放入上面的路徑通過
http://www.youdomain.com 訪問的就是主頁
http://bbs.yourdomain.com 訪問的就是論壇
其它二級域名類推。
server_name www.w3cgroup.com *.w3cgroup.com;
server_name_in_redirect off;
#設(shè)置默認(rèn)root
set $rootdir /usr/local/nginx/html/w3cgroup/;
#匹配三級域名
if ($host ~* ^([^/.]+)/.([^/.]+)/.([^/.]+)/.([^/.]+)$) {
set $rootdir /usr/local/nginx/html/w3cgroup/$2/$1;
#三級域名中有訪問指定的目錄則重定向到相應(yīng)的二級域名下
rewrite ^.+upload/?(.*)$ http://upload.w3cgroup.com/$1 permanent;
rewrite ^.+ijc/?(.*)$ http://ijc.w3cgroup.com/$1 permanent;
break;
}
#匹配二級域名
if ($host ~* ^([^/.]+)/.([^/.]+)/.([^/.]+)$) {
set $rs1 $1;
}
#設(shè)置www時root
if ($rs1 ~* ^www$) {
set $rootdir /usr/local/nginx/html/platform_ig/;
#二級域名中有訪問指定的目錄則重定向到相應(yīng)的二級域名下,注意,這里要使用last
rewrite ^.+upload/?(.*)$ upload/$1 last;
rewrite ^.+ijc/?(.*)$ ijc/$1 last;
break;
}
#設(shè)置非www二級域名時root
if ($rs1 !~* ^www$) {
set $rootdir /usr/local/nginx/html/w3cgroup/$rs1;
#二級域名中有訪問指定的目錄則重定向到相應(yīng)的二級域名下
rewrite ^.+upload/?(.*)$ http://upload.w3cgroup.com/$1 permanent;
rewrite ^.+ijc/?(.*)$ http://ijc.w3cgroup.com/$1 permanent;
break;
}
#應(yīng)用root
root $rootdir;
index index.php index.html;
error_page 404 http://$host/;注意:if () {} 之間需要空格,否則nginx.conf會報unknow directive 錯誤!
參考:
nginx rewrite flags
?last 相當(dāng)于apache里的[l]標(biāo)記,表示完成rewrite
?break 終止匹配, 不再匹配后面的規(guī)則
?redirect 返回302臨時重定向
?permanent 返回301永久重定向
nginx正則表達(dá)式匹配
?~ 為區(qū)分大小寫匹配
?~* 為不區(qū)分大小寫匹配
?!~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配
nginx文件及目錄匹配
? -f和!-f用來判斷是否存在文件
?-d和!-d用來判斷是否存在目錄
?-e和!-e用來判斷是否存在文件或目錄
?-x和!-x用來判斷文件是否可執(zhí)行
nginx全局變量
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri