https://www.cnblogs.com/wloveh/p/4640565.html
nginx rewrite 首先二級(jí)域名跳轉(zhuǎn)
當(dāng)訪問http://www..jbyuan.com 跳轉(zhuǎn)到http://www.jbyuan.com/nvxingjiankang/
方法一:
這種方法瀏覽器地址會(huì)變成 www.jbyuan.com/nvxingjiankang/
實(shí)現(xiàn)訪問如下:
復(fù)制代碼如下:
server{
listen 80;
server_name www.test.com;
location /{
root /data/test
index index.html;
}
}
server{
listen 80;
server_name *.test.com;
if($http_host~*"^(.*)\.com$"){
set $domain $1;
rewrie ^(.*)http://www.test.com/test/$domain/break;
}
}
方法二呼寸,
當(dāng)訪問http://www.jbyuan.com 跳轉(zhuǎn)到http://www.jbyuan.com/nvxinigjiankang/
復(fù)制代碼如下:
server{
listen 80;
server_name *.test.com
root /usr/local/www;
#這里可以添加多個(gè)目錄,如果不添加目錄精肃,會(huì)無(wú)法訪問到http://www.jbyuan.com/nvxingjiankang/目錄下的文件妄呕,如圖片目錄/images
location ~^/(test|images|styles)/{
proxy_redirect off;
proxy_set_header Host www.test.com;
proxy_pass http://192.168.1.2:8080;
}
location/{
set $domain default;
if($http_host~*"^(.*)\.test\.com$"){
set $ddomain $1;
}
rewrite ^/(.*) /test/$domain/$1 last;
}
access_log off;
}
rewrite命令
nginx的rewrite相當(dāng)于apache的rewriterule(多數(shù)情況下可以把原有的apache的rewrite規(guī)則加上引號(hào)就可以直接使用),他可以用在server,location和if條件判斷中抹剩,命令格式如下:
rewrite 正則表達(dá)式替換目標(biāo)flag標(biāo)記
flag可以用以下幾種格式撑帖;
last -基本上都用這個(gè)flag.
break -中止Rewrite,不再繼續(xù)匹配
redirect - 返回臨時(shí)重定向的HTTP狀態(tài)302
permanent -返回永久重定向的HTTp狀態(tài)301
例如下面這段設(shè)定nginx 將某個(gè)目錄下面的文件重定向到另外一個(gè)目錄,
2.gz break;
}
nginx重定向的if條件判斷
在server和location倆種情況下可以使用nginx的if條件判斷澳眷,條件可以分為以下幾種:
正則表達(dá)式
如:
匹配判斷
~為區(qū)分大小寫匹配胡嘿; !~為區(qū)分大小寫不匹配
~*為不區(qū)分大小寫匹配钳踊; 衷敌!~為不區(qū)分大小寫匹配
就是當(dāng)用戶輸入 www.a.com.cn 自動(dòng)跳轉(zhuǎn)到www.a.com這個(gè)域名勿侯;
rewrite ^/(.*)$http://www.a.com/$1 permanent; 或者cname
例如下面設(shè)定nginx在用戶使用ie的使用重定向到/nginx-ie目錄下;
if($http_user_agent ~MSIE){
rewirte ^(.*)$ /nginx-ie/$1 break;
}
文件和目錄判斷
-f和 !-f判斷是否存在文件
-d和缴罗!-d 判斷是否存在目錄
-e 和 !-e 判斷是否存在文件或目錄
-x 和 !-x判斷文件是否可執(zhí)行
例如下面設(shè)定nginx在文件和目錄不存在的時(shí)候重定向:
復(fù)制代碼代碼如下:
if(!-e $request_filename){
proxy_pass http://127.0.0.1;
}
return
返回http代碼助琐,例如設(shè)置nginx防盜鏈:
復(fù)制代碼如下:
location ~*\.(gif|jpg|png|swf|flv)${
valid_referers none blocked www.jefflei.comwww.leizhenfang.com;
if($invalid_referer){
return 404;
}
}
記一正則,匹配非某單詞
由于要rewrite一個(gè)地址從
/mag/xx/xxx/->/m/xxx
但是原先/mag/xx/more/要保留
這個(gè)就要寫一個(gè)比較奇特的正則了面氓,嘗試比較多的寫法沒有成功
最先想到的是:
復(fù)制代碼如下:
location ~*^/mag/[^/]+/[^(more)]+/{
rewirte ^/mag/[^/]+/(.*)/m/$1 permanebt;
}
[]的寫法并沒有鋪?zhàn)嘈Пァ@锩媸瞧ヅ涞膯蝹€(gè)字符的,這樣寫無(wú)效侧但,匹配不了
location ~*/mag/[^/]+/(?!more)([^/]+)/{
rewrite ^/mag/[^/]+/(.*)/m/$1 permanent;
}
這個(gè)寫法勉強(qiáng)應(yīng)付了矢空,后面的匹配元素雖說(shuō)不完美,但是也能足夠我的所有需求了
常用的分組語(yǔ)法
捕獲
(exp)匹配exp禀横,病捕獲文本到自動(dòng)命名的組里屁药,也可以寫成(?'name'exp)
(exp) 匹配exp,并捕獲文本到自動(dòng)命名的組里
(?exp) 匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp)
(?:exp) 匹配exp,不捕獲匹配的文本柏锄,也不給此分組分配組號(hào)
(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置酿箭,
(?!exp)匹配后面跟的不是exp的位置
(?<!exp)匹配前面不是exp的位置
為何要使用301重定向
在網(wǎng)站建設(shè)中需要網(wǎng)頁(yè)重定向的情況很多:如網(wǎng)絡(luò)目錄結(jié)構(gòu)變動(dòng),網(wǎng)頁(yè)重命名趾娃,網(wǎng)頁(yè)擴(kuò)展名改變缭嫡,網(wǎng)站域名改變等。如果不做重定向抬闷,用戶的收藏和搜索引擎數(shù)據(jù)庫(kù)中的舊地址只能讓訪客得到一個(gè)錯(cuò)誤的404頁(yè)面妇蛀,訪問流量白白流失。不僅如此笤成,之前該頁(yè)面的一切積累比如pr值就都白費(fèi)了
301重定向不僅能使頁(yè)面實(shí)現(xiàn)自動(dòng)跳轉(zhuǎn)评架,對(duì)于搜索引擎來(lái)說(shuō),也可能傳遞pr值炕泳,
nginx重定向規(guī)則詳細(xì)介紹纵诞,請(qǐng)參考:http://www.jbxue.com/article/2186.html
301重定向方法
進(jìn)行了301重定向,把www.jefflei.com和jefflei.com合并培遵,并把之前的域名也一并合并浙芙,有倆種方法實(shí)現(xiàn),第一種方法是判斷nginx核心變量host(老版本是http_host);
復(fù)制代碼如下:
1
server{
#跳轉(zhuǎn)
listen 80;
server_name www.jefflei.com.com jefflei.com;
if($host !='www.jefflei.com'){
rewrite ^/(.*)$ http://www.jefflei.com/$1 permanent;
}
}
2
server{
#跳轉(zhuǎn)
listen 80;
serer_name jefflei.com;
rewrite ^/(.*)http://www.jefflei.com/$1 permanent;
}
3
server{
#跳轉(zhuǎn)
listen 80;
serer_name jefflei.com;
rewrite ^ http://www.jefflei.com$request_uri? permanent;
}
測(cè)試了都是ok籽腕,這三種方法中嗡呼,permanent是關(guān)鍵,詳細(xì)說(shuō)明見nginx重定向規(guī)則說(shuō)明皇耗。
last- 基本上都是用了這個(gè)Flag
break - 終止Rewirte,不再繼續(xù)匹配
redirect - 返回臨時(shí)重定向的HTTP狀態(tài)302
permanent - 返回的永久重定向的HTTP狀態(tài)301
好了晤锥,現(xiàn)在可以檢查結(jié)果,這里可以看返回的HTTP頭信息:
http://www.seoconsultants.com/tools/headers.asp
第二種方法沒有測(cè)試成功...
測(cè)試是否定向成功
http://qinfy.net/301-redirect-for-nginx/
輸入指令~
/usr/local/nginx/sbin/nginx -t
提示:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful
測(cè)試成功~ 重啟nginx~ 輸入指令~
/usr/local/nginx/sbin/nginx -s reload
重啟之后測(cè)試一下~是否成功設(shè)定完成! 輸入指令~
curl -I imcat.tk
會(huì)輸出:
HTTP/1.1 301 Moved Permanently
Server: nginx/0.7.65
Date: Tue, 03 Aug 2010 01:12:37 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: http://qinfy.net/