URL重寫

摘抄了了張宴一本書上的URL重寫規則,算是複習一下吧;

nginx URL 重寫
1,ngin中的URL 重寫主要是使用perl的正則表達式,這也是爲什麼安裝Nginx的時候,要制定PCRE的原因。
2,Nginx Rewrite 規則相關指令
Nginx 重寫規則的主要指令是if ,rewrite,set,return break 等,而rewrite是最重要的指令,
例:

rewirte ^/b/(.*)\.html /play.php?video=$1 break;


可以這樣子理解上面的例子:


指令      匹配規則          動作
rewirte   ^/b/(.*)\.html   /play.php?video=$1 break;  ;是Nginx 默認的結尾符號
上面的重寫規則 匹配開頭 /b/目錄下任何html 請求 重寫到對應的 /play.php?video=html名稱 break;


另外一個例子 IF
if (!-f $request_filename)
	{
	rewrite ^/img/(.*)$ /site/$host/images/$1 last;
	}


其中 $request_filename $host爲內置變量  $1 是前面()內的配置 後向引用


2.1 break 指令
語法 break
使用環境:server,location,if
該命令作用是完成當前規則集,不再處理後面的rewrite指令
例:
if ($slow) {
	limit_rate 10k;
	break;
	}

2.2 if
語法 if (condition) {........}
使用環境 server,location
該指令用於檢查一個條件是否符合,如果條件符合,則執行大括號內的語句。if指令不支持嵌套
,不支持多個條件&&和||處理。
以下信息可以指定爲條件:
1,變量名,錯誤的值包括:空字符串“”,或者任何以0開始的字符串;
2,變量比較可以使用“=” != 運算符;
3,正則表達式模式匹配可以使用 ~*(不區分大小寫) ~ (區分大小寫)
4,!取反操作符,如 !~ !~* 
5,-f !-f 判斷文件是否存在
6,-d !-d判斷文件或目錄是否存在
7,-x !-x來判斷文件是否可執行
放在()內的正則表達式 可以使用$1至$9 引用
例:
if ($http_user_agent ~ MSIE) {
	rewrite ^(.*)$ /msie/$1 break;
	}


if ($htto_cookie ~* "id=([^;] +)(?:;|$)") {
	set $id $1;
	}


if ($request_method = POST) {
	return 405;
	}


if (!-f $request_filename) {
	break;
	proxy_pass http://127.0.0.1;
	}
	
if ($slow) {
	limit_rate 10k;
	break;
	}
	
if ($invalid_referer) {
	return 403;
	}
	
if ($args ^~ post=140) {
	rewrite ^ http://example.com/permanent;
	}



3 return 
語法:return code
使用環境: server,location,if

location ~ .*\.(sh|bash)?$
	{
	return 403;
	}


2.4 rewrite 
語法 rewrit regex replancement flag
使用環境: server,location,if
該指令根據表達式來重定向URL或者修改字符串,指令根據配置文件中的順序來執行。
重寫表達式只對相對路徑有效,
其中flag 標記指的是last break redirect permanent
區別如下:
last 相當於apache裏面的[L] 標記,表示完成rewrite;
break 本條規則匹配完成後,終止匹配,不再匹配後面的規則;
redirect 返回302臨時重定向,瀏覽器地址欄會顯示跳轉後的URL地址
permanent 返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址
2.5set 指令
語法: set variable valus
使用環境: server,location,if
該指令用於定義一個變量,並給變量賦值,變量的值可以爲文本,變量及文本變量的聯合
實例如下:
set $varname 'hello'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章