4减牺,nginx URL重寫

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對(duì)應(yīng)第二個(gè)括號(hào)(.*)中對(duì)應(yīng)的字符串: 復(fù)制代碼如下: location /download/{ rewrite ^(/download/.*)/m/(.*)\.* 1/nginx-rewrite/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.comjefflei.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/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矾瘾,一起剝皮案震驚了整個(gè)濱河市女轿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壕翩,老刑警劉巖蛉迹,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異放妈,居然都是意外死亡北救,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門芜抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)珍策,“玉大人,你說(shuō)我怎么就攤上這事宅倒∪林妫” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵拐迁,是天一觀的道長(zhǎng)蹭劈。 經(jīng)常有香客問我,道長(zhǎng)线召,這世上最難降的妖魔是什么铺韧? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮缓淹,結(jié)果婚禮上哈打,老公的妹妹穿的比我還像新娘。我一直安慰自己讯壶,他們只是感情好料仗,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹏溯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淹仑。 梳的紋絲不亂的頭發(fā)上丙挽,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音匀借,去河邊找鬼颜阐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吓肋,可吹牛的內(nèi)容都是我干的凳怨。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肤舞!你這毒婦竟也來(lái)了紫新?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤李剖,失蹤者是張志新(化名)和其女友劉穎芒率,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篙顺,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偶芍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了德玫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匪蟀。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宰僧,靈堂內(nèi)的尸體忽然破棺而出材彪,到底是詐尸還是另有隱情,我是刑警寧澤撒桨,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布查刻,位于F島的核電站,受9級(jí)特大地震影響凤类,放射性物質(zhì)發(fā)生泄漏穗泵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一谜疤、第九天 我趴在偏房一處隱蔽的房頂上張望佃延。 院中可真熱鬧,春花似錦夷磕、人聲如沸履肃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尺棋。三九已至,卻和暖如春绵跷,著一層夾襖步出監(jiān)牢的瞬間膘螟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工碾局, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荆残,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓净当,卻偏偏與公主長(zhǎng)得像内斯,于是被迫代替她去往敵國(guó)和親蕴潦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361