ãnginxéè¿ngx_http_rewrite_module模åæ¯æurléåãæ¯æifæ¡ä»¶å¤æï¼ä½ä¸æ¯æelseã
ãã该模åéè¦PCREæ¯æï¼åºå¨ç¼è¯nginxæ¶æå®PCREæºç ç®å½,nginxå®è£
æ¹æ³ã
ããnginx rewriteæ令æ§è¡é¡ºåºï¼
ãã1.æ§è¡serveråçrewriteæ令(è¿éçåæçæ¯serverå
³é®åå{}å
å´çåºåï¼å
¶å®xxå类似)
ãã2.æ§è¡locationå¹é
ãã3.æ§è¡éå®çlocationä¸çrewriteæ令
ããå¦æå
¶ä¸ææ¥URI被éåï¼åéæ°å¾ªç¯æ§è¡1-3ï¼ç´å°æ¾å°çå®åå¨çæ件
ããå¦æ循ç¯è¶
è¿10次ï¼åè¿å500 Internal Server Erroré误
ããbreakæ令
ããè¯æ³ï¼break;
ããé»è®¤å¼ï¼æ
ããä½ç¨åï¼server,location,if
ããåæ¢æ§è¡å½åèæ主æºçåç»rewriteæ令é
ããbreakæ令å®ä¾ï¼
ããif ($slow) {
ããlimit_rate 10k;
ããbreak;
ãã}
ããifæ令
ããè¯æ³ï¼if(condition){...}
ããé»è®¤å¼ï¼æ
ããä½ç¨åï¼server,location
ãã对ç»å®çæ¡ä»¶conditionè¿è¡å¤æãå¦æ为çï¼å¤§æ¬å·å
çrewriteæ令å°è¢«æ§è¡ã
ããifæ¡ä»¶(conditon)å¯ä»¥æ¯å¦ä¸ä»»ä½å
容:
ããä¸ä¸ªåéåï¼falseå¦æè¿ä¸ªåéæ¯ç©ºå符串æè
以0å¼å§çå符串ï¼
ãã使ç¨= ,!= æ¯è¾çä¸ä¸ªåéåå符串
ããæ¯ç¨~ï¼ ~*ä¸æ£å表达å¼å¹é
çåéï¼å¦æè¿ä¸ªæ£å表达å¼ä¸å
å«}ï¼;åæ´ä¸ªè¡¨è¾¾å¼éè¦ç¨" æ' å
å´
ãã使ç¨-f ï¼!-f æ£æ¥ä¸ä¸ªæ件æ¯å¦åå¨
ãã使ç¨-d, !-d æ£æ¥ä¸ä¸ªç®å½æ¯å¦åå¨
ãã使ç¨-e ï¼!-e æ£æ¥ä¸ä¸ªæ件ãç®å½ã符å·é¾æ¥æ¯å¦åå¨
ãã使ç¨-x ï¼ !-x æ£æ¥ä¸ä¸ªæ件æ¯å¦å¯æ§è¡
ããifæ令å®ä¾
ããif ($http_user_agent ~ MSIE) {
ããrewrite ^(.*)$ /msie/$1 break;
ãã}
ããif ($http_cookie ~* "id=([^;]+)(?:;|$)") {
ããset $id $1;
ãã}
ããif ($request_method = POST) {
ããreturn 405;
ãã}
ããif ($slow) {
ããlimit_rate 10k;
ãã}
ããif ($invalid_referer) {
ããreturn 403;
ãã}
ããreturnæ令
ããè¯æ³ï¼return code;
ããreturn code URL;
ããreturn URL;
ããé»è®¤å¼ï¼æ
ããä½ç¨åï¼server,location,if
ããåæ¢å¤ç并è¿åæå®ç¶æç (code)ç»å®¢æ·ç«¯ã
ããéæ åç¶æç 444表示å
³éè¿æ¥ä¸ä¸ç»å®¢æ·ç«¯åååºå¤´ã
ããä»0.8.42çæ¬èµ·ï¼return æ¯æååºURLéå®å(对äº301ï¼302ï¼303ï¼307ï¼ï¼æè
ææ¬ååº(对äºå
¶ä»ç¶æç ).
ãã对äºææ¬æè
URLéå®åå¯ä»¥å
å«åé
ããrewriteæ令
ããè¯æ³ï¼rewrite regex replacement [flag];
ããé»è®¤å¼ï¼æ
ããä½ç¨åï¼server,location,if
ããå¦æä¸ä¸ªURIå¹é
æå®çæ£å表达å¼regexï¼URIå°±æç
§replacementéåã
ããrewriteæé
ç½®æ件ä¸åºç°ç顺åºæ§è¡ãflagsæ å¿å¯ä»¥åæ¢ç»§ç»å¤çã
ããå¦æreplacement以"http://"æ"https://"å¼å§ï¼å°ä¸å继ç»å¤çï¼è¿ä¸ªéå®åå°è¿åç»å®¢æ·ç«¯ã
ããflagå¯ä»¥æ¯å¦ä¸åæ°
ããlast åæ¢å¤çåç»rewriteæ令éï¼ç¶å对å½åéåçæ°URIå¨rewriteæ令éä¸éæ°æ¥æ¾ã
ããbreak åæ¢å¤çåç»rewriteæ令éï¼å¹¶ä¸å¨éæ°æ¥æ¾,ä½æ¯å½ålocationå
å©ä½érewriteè¯å¥ålocationå¤ççérewriteè¯å¥å¯ä»¥æ§è¡ã
ããredirect å¦æreplacementä¸æ¯ä»¥http:// æhttps://å¼å§ï¼è¿å302临æ¶éå®å
ããpermant è¿å301æ°¸ä¹
éå®å
ããæç»å®æ´çéå®åURLå
æ¬è¯·æ±scheme(http://,https://ç),请æ±çserver_name_in_redirectå port_in_redirecä¸é¨å ï¼è¯´ç½äºä¹å°±æ¯httpåè®® åå 端å£ä¸é¨åç»æã
ããrewriteå®ä¾
ããserver {
ãã...
ããrewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
ããrewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
ããreturn 403;
ãã...
ãã}
ããå¦æè¿äºrewriteæ¾å° â/download/â locationå¦ä¸æ示, é£ä¹åºä½¿ç¨breakèä¸æ¯last , 使ç¨lastå°å¾ªç¯10次å¹é
ï¼ç¶åè¿å 500é误:
ããlocation /download/ {
ããrewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
ããrewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
ããreturn 403;
ãã}
ãã对äºéååçURLï¼replacementï¼å
å«å请æ±ç请æ±åæ°ï¼åURLç?åçå
容ãå¦æä¸æ³å¸¦å请æ±çåæ° ï¼å¯ä»¥å¨replacementåå ä¸ä¸ªé®å·ãå¦ä¸ï¼æ们å äºä¸ä¸ªèªå®ä¹çåæ°user=$1,ç¶åå¨ç»å°¾å¤æ¾äºä¸ä¸ªé®å·?,æå请çåæ°å»æã
ããrewrite ^/users/(.*)$ /show?user=$1? last;
ããå¦ææ£å表达regexå¼ä¸å
å« â}â æ â;â, é£ä¹æ´ä¸ªè¡¨è¾¾å¼éè¦ç¨åå¼å·æåå¼å·å
å´.
ããrewrite_logæ令
ããè¯æ³ï¼rewrite_log on|off;
ããé»è®¤å¼ï¼rewrite_log off;
ããä½ç¨åï¼http,server,location,if
ããå¼å¯æå
³é以notice级å«æå°rewriteå¤çæ¥å¿å°error logæ件ã
ããnginxæå¼rewrite logä¾å
ããrewrite_log on;
ããerror_log logs/xxx.error.log notice;
ãã1.æå¼rewrite on
ãã2.æerror logç级å«è°æ´å° notice
ããsetæ令
ããè¯æ³ï¼set variable value;
ããé»è®¤å¼ï¼none
ããä½ç¨åï¼server,location,if
ããå®ä¹ä¸ä¸ªåé并èµå¼ï¼å¼å¯ä»¥æ¯ææ¬ï¼åéæè
ææ¬åéæ··åä½ã
ããuninitialized_variable_warnæ令
ããè¯æ³ï¼uninitialized_variable_warn on | off;
ããé»è®¤å¼ï¼uninitialized_variable_warn on
ããä½ç¨åï¼http,server,location,if
ããæ§å¶æ¯å¦è¾åºä¸ºåå§åçåéå°æ¥å¿
温馨提示:答案为网友推荐,仅供参考