linux中nginx重定向方法總結


linux中nginx 301重定向跳轉方法總結

第一種情況:訪問aaaaaaa站定向到bbbbbbbbbbb站

復制代碼代碼如下:

server {
server_naaaaaaame www.aaaaaaa.com ;
rewrite ^(.*) http://www.bbbbbbbbbbb.com$1 permaaaaaaanent;
}


第二種情況:不是訪問aaaaaaa站的全部重定向到指定頁面


復制代碼代碼如下:

server {
server_naaaaaaame www.aaaaaaa.com;
if ($host != ‘aaaaaaa.com' )
{ rewrite ^/(.*)$ http://www.bbbbbbbbbbb.com/$1 permaaaaaaanent; }}

如果寫在第一個server段 使用IP訪問時也將被重定向

第三種帶WWW或者不帶WWW之間的跳轉


復制代碼代碼如下:

server
{
server_naaaaaaame c.net
rewrite ^/(.*)$ http://www.c.net/$1 permaaaaaaanent;
}


下面是nginx的規則跳轉:

首先一、得在你的域名管理里面定義 c.com和www.c.com指向你的主機ip地址,我們可以使用nslookup命令測試:直接輸入 nslookup c.com和nslookup www.c.com 都有指向ip的A記錄即可。

第二、我們才能在nginx里面配置rewrite規則。打開 nginx.conf文件
找到你的server配置段:【以下是我的server配置段】


復制代碼代碼如下:
server
{
listen 80;
server_name www.c.com c.com;
if ($host != ‘www.c.com' ) {
rewrite ^/(.*)$ http://www.c.com/$1 permanent;
}

這樣就是用戶直接訪問c.com直接跳轉的www.c.com。即讓不帶www的域名跳轉到帶www的域名。

三、我們可以是多個二級域名、三級域名都可以隨意跳轉、或者讓它們都跳轉到blog.c.com這個域名
同意添加如下語句即可:


復制代碼代碼如下:
server
{
listen 80;
server_name blog.c.com wgkgood.gicp.net;
if ($host = ‘wgkgood.gicp.net' ) {
rewrite ^/(.*)$ http://blog.c.com/$1 permanent;
}


為何要使用301重定向
在網站建設中需要網頁重定向的情況很多:如網頁目錄結構變動,網頁重命名、網頁的擴展名改變、網站域名改變等。如果不做重定向,用戶的收藏和搜索引擎數據庫中的舊地址只能讓訪客得到一個404錯誤信息頁面,訪問流量白白喪失。不僅如此,之前該頁面的一切積累(比如PR值)就都白費了。
301重定向不僅能使頁面實現自動跳轉,對於搜索引擎來說,也可能可以傳遞PR值。

--------------------------------------------------------------------------------
nginx重定向規則詳細介紹

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 http://www.jefflei.com/ http://www.leizhenfang.com/;
if ($invalid_referer) {
return 404;
}
}
set
設置nginx變量

301重定向方法

進行了301重定向,把www.jb51.net和jb51.net合並,並把之前的域名也一並合並. 有兩種實現方法,第一種方法是判斷nginx核心變量host(老版本是http_host):
server {
server_name www.jb51.net jb51.net ;
if ($host != 'www.jb51.net' ) {
rewrite ^/(.*)$ http://www.jb51.net/$1 permanent;
}
...
}
第二種方法:
server {
server_name jb51.net;
rewrite ^/(.*) http://www.jb51.net/$1 permanent;
}

測試了第一種方法ok,這兩種方法中, permanent是關鍵,詳細說明見nginx重定向規則說明。

last – 基本上都用這個Flag。
break – 中止Rewirte,不在繼續匹配
redirect – 返回臨時重定向的HTTP狀態302
permanent – 返回永久重定向的HTTP狀態301

好了,現在可以檢查結果,這里可以看返回的HTTP頭信息:

http://www.seoconsultants.com/tools/headers.asp

第二種方法沒有測試成功...


測試是否定向成功

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

測試成功~ 重啟nginx~ 輸入指令~

/usr/local/nginx/sbin/nginx -s reload
重啟之后測試一下~是否成功設定完成! 輸入指令~

curl -I imcat.tk


會輸出:

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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM