Nginx重寫與轉(zhuǎn)發(fā)
Nginx通過ngx_http_rewrite_module模塊悍赢,實(shí)現(xiàn)Url的重寫和轉(zhuǎn)發(fā)。
對于Ng的Rewite指令來說货徙,重寫和轉(zhuǎn)發(fā)其實(shí)存在一些區(qū)別的。眾可周知皮胡,Ng的Rewite指令如下:
- 語法:rewrite 第一個參數(shù)[條件表達(dá)式] 第二個參數(shù)[替代目標(biāo)值] 第三個參數(shù)[flag];
- 作用域:server 痴颊、location 、if
flag的參數(shù)有:
- last 相當(dāng)于apache里面的[L]標(biāo)記屡贺,默認(rèn)last蠢棱,表示rewrite。
- break 本條規(guī)則匹配完成后甩栈,終止匹配泻仙,不再匹配后面的規(guī)則。
- redirect 返回302臨時重定向量没,瀏覽器地址會顯示跳轉(zhuǎn)后的URL地址玉转。
- permanent 返回301永久重定向,瀏覽器地址會顯示跳轉(zhuǎn)后的URL地址殴蹄。
注:如果 “ 第二個參數(shù)以 http://或https:// 開頭 ”究抓,將直接重定向。
rewrite /(.*)$ http://m.xxx.com permanent;
rewrite ^/(.*)$ /index.php/wap/$1 last;
rewrite ^/(.*)$ /index.php/$1 last;
rewrite /(.*)$ http://b2c.xxx.com/$1 last;
Nginx實(shí)現(xiàn)偽靜態(tài)
注: 本例主要針對PHP
偽靜態(tài)是一種可以把PHP
文件后綴改成任何文件后綴的方法袭灯,也可以用來隱藏入口文件刺下,如:index.php
http://b2c.xxx.com/index.php/product-545.html
http://b2c.xxx.com/product-545.html
Nginx.conf 配置如下:
# 偽靜態(tài)---begin-----
if ($request_uri ~ (.+?\.php)(|/.*)$ ){
break;
}
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
}
# 偽靜態(tài)---END-----
Nginx實(shí)現(xiàn)與或非
強(qiáng)大的Nginx居然不支持多重邏輯判斷( 即:and 與 or 或者 && 與 || ),簡直嚇屎哥了稽荧,怎么辦...幸好有Set指令橘茉。下面給兩個簡單的例子:
set $wap_flsg 0;
if ( $host = 'b2c.xxx.com' ) {
set $wap_flsg "${wap_flsg}1";
}
if ( $request_uri ~ (/wap) ) {
set $wap_flsg "${wap_flsg}1";
}
if ( $wap_flsg = "011" ) {
rewrite /(.*)$ http://m.xxx.com permanent;
}
set $master_domain 0;
if ( $host != 'b2c.xxx.com' ) {
set $master_domain "${master_domain}1";
#rewrite /(.*)$ http://b2c.xxx.com/$1 last;
}
if ( $host != 'm.xxx.com' ) {
set $master_domain "${master_domain}1";
}
if ( $master_domain = "011") {
rewrite /(.*)$ http://b2c.xxx.com/$1 last;
}