linux中nginx 301重定向跳轉方法總結html
第一種狀況:訪問aaaaaaa站定向到bbbbbbbbbbb站linux
複製代碼代碼以下:nginx
server {
server_naaaaaaame www.aaaaaaa.com ;
rewrite ^(.*) http://www.bbbbbbbbbbb.com$1 permaaaaaaanent;
} 正則表達式
第二種狀況:不是訪問aaaaaaa站的所有重定向到指定頁面 數據庫
複製代碼代碼以下:apache
server {
server_naaaaaaame www.aaaaaaa.com;
if ($host != ‘aaaaaaa.com' )
{ rewrite ^/(.*)$ http://www.bbbbbbbbbbb.com/$1 permaaaaaaanent; }} curl
若是寫在第一個server段 使用IP訪問時也將被重定向 測試
第三種帶WWW或者不帶WWW之間的跳轉 網站
複製代碼代碼以下:搜索引擎
server
{
server_naaaaaaame c.net
rewrite ^/(.*)$ http://www.c.net/$1 permaaaaaaanent;
}
下面是nginx的規則跳轉:
首先1、得在你的域名管理裏面定義 c.com和www.c.com指向你的主機ip地址,咱們可使用nslookup命令測試:直接輸入 nslookup c.com和nslookup www.c.com 都有指向ip的A記錄便可。
第2、咱們才能在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的域名。
3、咱們能夠是多個二級域名、三級域名均可以隨意跳轉、或者讓它們都跳轉到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/