1、訪問a站定向到b站
server {
server_name www.a.com ;
rewrite ^(.*) http://www.b.com$1 permanent;
}
2、不是訪問a站的全部重定向到指定頁面
server {
server_name www.a.com;
if ($host != 'a.com' )
{ rewrite ^/(.*)$ http://www.b.com/$1 permanent; }
}
如果寫在第一個server段 使用IP訪問時也將被重定向
3、帶www或者不帶www之間的跳轉
server
{
server_name c.net
rewrite ^/(.*)$ http://www.c.net/$1 permanent;
}
或者
server
{
listen 80;
server_name www.c.com c.com;
if ($host != 'www.c.com' ) {
rewrite ^/(.*)$ http://www.c.com/$1 permanent;
}
為何要使用301重定向
在 網站建設中需要網頁重定向的情況很多:如網頁目錄結構變動,網頁重命名、網頁的擴展名改變、網站域名改變等。如果不做重定向,用戶的收藏和搜索引擎數據庫 中的舊地址只能讓訪客得到一個404錯誤信息頁面,訪問流量白白喪失。不僅如此,之前該頁面的一切積累(比如PR值)就都白費了。
301重定向不僅能使頁面實現自動跳轉,對於搜索引擎來說,也可能可以傳遞PR值。
rewrite命令
nginx的rewrite相當於apache的rewriterule(大多數情況下可以把原有apache的rewrite規則加上引號就可以直接使用),它可以用在server,location 和IF條件判斷塊中,命令格式如下:
rewrite 正則表達式 替換目標 flag標記
flag標記可以用以下幾種格式:
last – 基本上都用這個Flag。
break – 中止Rewirte,不在繼續匹配
redirect – 返回臨時重定向的HTTP狀態302
permanent – 返回永久重定向的HTTP狀態301
一些可用的全局變量有,可以用做條件判斷(待補全)
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
nginx重定向的IF條件判斷
在server和location兩種情況下可以使用nginx的IF條件判斷,條件可以為以下幾種:
匹配判斷
~ 為區分大小寫匹配; !~為區分大小寫不匹配
~* 為不區分大小寫匹配;!~為不區分大小寫不匹配
文件和目錄判斷
-f和!-f判斷是否存在文件
-d和!-d判斷是否存在目錄
-e和!-e判斷是否存在文件或目錄
-x和!-x判斷文件是否可執行
return
返回http代碼
set
設置nginx變量
重啟nginx~ 輸入指令~
/usr/local/nginx/sbin/nginx -s reload
*