nginx反向跳轉 案例1
1.nginx 根據http_referer來跳轉
索引擎的搜尋頁面進到我們的網站時,就可以做一個跳轉。
其實,說實話,這樣做也沒有什麼太大意義,但是nginx的確可以實現這樣的操作:
在配置檔案的 server {} 中加入如下配置:
if ($http_referer ~* "www.baidu.com") {
rewrite ^/(.*)$ http://www.lishiming.net redirect;
}
if ($http_referer ~* "www.google.com") {
rewrite ^/(.*)$ http://www.lishiming.net redirect;
}
這樣配置以後,凡是從百度或者google點過來的請求都會跳轉到 www.lishiming.net
nginx實現301域名跳轉
bbaobelief關注0人評論1069人閱讀2012-12-20 13:41:05
關於域名跳轉可以有多種方法:
1.在dns中設定URL重定向;
2.修改程式實現;
3.修改伺服器配置;
第一種方法:我的dns使用的是免費的dnspod,需網站接入1個月後才可以使用URL重定向服務;
第二種方法:據說對SEO不好,果斷放棄;
第三種方法:我的網站伺服器使用的是nginx,下面介紹nginx實現域名重定向的兩種方法。
①單獨對需要跳轉的域名在server寫重定向
- server{
- listen 80;
- server_name *.wphones.cn wphones.cn www.aiphones.cn *.aiphones.cn aiphones.cn;
- access_log off;
- rewrite ^/(.*)$ http://www.wphones.cn/$1 permanent;
- }
- server {
- listen 80;
- server_name www.wphones.cn;
- ...
- }
②對兩個域名做一個host判斷,在server_name下新增
- server {
- listen 80;
- server_name www.pdavip.com test.pdavip.com;
- if ($host != ‘test.pdavip.com’) {
- rewrite ^/(.*)$ http://www.fashao.me/$1 permanent;
- }
- ...
- }
需要注意的是if條件中的域名單引號。應該是中文的單引號,英文單引號會出現下面的錯誤提示。
我想許多配置不成功的朋友就是這個原因引起的。
關於nginx重定向規則請參考:
http://www.jefflei.com/post/1015.html
nginx重定向規則詳細介紹(原創)
2009年2月20日
Nginx的重定向用到了Nginx的HttpRewriteModule,下面簡單解釋以下如何使用的方法:
rewrite命令
nginx的rewrite相當於apache的rewriterule(大多數情況下可以把原有apache的rewrite規則加上引號就可以直接使用),它可以用在server,location 和IF條件判斷塊中,命令格式如下:
rewrite 正則表示式 替換目標 flag標記
flag標記可以用以下幾種格式:
last – 基本上都用這個Flag。
break – 中止Rewirte,不在繼續匹配
redirect – 返回臨時重定向的HTTP狀態302
permanent – 返回永久重定向的HTTP狀態301
例如下面這段設定nginx將某個目錄下面的檔案重定向到另一個目錄,$2對應第二個括號(.*)中對應的字串:location /download/ {
rewrite ^(/download/.*)/m/(.*)\..*$ $1/nginx-rewrite/$2.gz break;
}
nginx重定向的IF條件判斷
在server和location兩種情況下可以使用nginx的IF條件判斷,條件可以為以下幾種:
正則表示式
如:
匹配判斷
~ 為區分大小寫匹配; !~為區分大小寫不匹配
~* 為不區分大小寫匹配;!~為不區分大小寫不匹配
例如下面設定nginx在使用者使用ie的使用重定向到/nginx-ie目錄下:if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}
檔案和目錄判斷
-f和!-f判斷是否存在檔案
-d和!-d判斷是否存在目錄
-e和!-e判斷是否存在檔案或目錄
-x和!-x判斷檔案是否可執行
例如下面設定nginx在檔案和目錄不存在的時候重定向:if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}
return
返回http程式碼,例如設定nginx防盜鏈:
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.jefflei.com www.leizhenfang.com;
if ($invalid_referer) {
return 404;
}
}
-------------------------
--------