Jeden. Regulárna výrazová zhoda, kde: * ~ je párovanie citlivé na veľkosť písmen * ~* je zhoda bez ohľadu na veľkosť a veľkosť * !~ a !~* sú nesúlady citlivé na veľkosť písmen a necitlivé na veľkosť písmen Dva. Súbor a adresár sa zhodujú, kde: * -f a !-f sa používajú na určenie, či súbor existuje * -d a !-d sa používajú na určenie, či adresár existuje * -e a !-e sa používajú na určenie, či súbor alebo adresár existuje * -x a !-x sa používajú na určenie, či je súbor spustiteľný alebo nie 3. Posledným parametrom inštrukcie prepísania je značka vlajky, ktorá je označená: 1.last je ekvivalentný znaku [L] v apache, čo znamená prepísanie. 2. Prestávka Po dokončení párovania tohto pravidla sa párovanie ukončí a nasledujúce pravidlá už nebudú párované. 3.redirect vráti dočasné presmerovanie 302 a adresa prehliadača zobrazí URL adresu po skoku. 4. trvalý návrat 301 trvalé presmerovanie, adresa prehliadača zobrazí URL adresu po skoku.
Použite last and break na implementáciu prepisovania URI a adresný riadok prehliadača zostáva nezmenený. A medzi nimi je malý rozdiel, používanie príkazu alias musí byť označené ako posledné; Pri používaní proxy_pass direktív musíte použiť značku break. Po vykonaní posledného tagu v tomto pravidle prepisu bude na serveri{......} Tag znovu iniciuje požiadavku, zatiaľ čo break tag ukončí zápas po dokončení pravidlového zápasu. Napríklad: ak presmerujeme URL ako /photo/123456 na /path/to/photo/12/1234/123456.png prepísať "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;
Štyri. Pravidlo NginxRewrite
1. príkaz break Prostredie používania: server, lokalita, ak; Smernica dopĺňa aktuálnu sadu pravidiel a už nerieši direktívu prepísania.
2. Ak je direktívna Prostredie používania: server, lokalita Táto inštrukcia sa používa na overenie, či je podmienka splnená, a ak áno, na vykonanie príkazu vo vnútri zátvoriek. Príkaz If nepodporuje vnorovanie a nepodporuje viacero podmienok && a || Liečba.
3. Príkaz na návrat syntax: returncode ; Prostredie používania: server, lokalita, ak; Táto inštrukcia sa používa na ukončenie vykonávania pravidla a vrátenie stavového kódu klientovi. Príklad: Ak navštívená URL končí na ".sh" alebo ".bash", vráti sa stavový kód 403 Poloha ~ .*\. (š|buch)?$
{ return 403;
}
4. Príkaz na prepísanie Syntax: vlajka náhrady rewriteregexu Prostredie používania: server, lokalita, ak Táto smernica presmeruje URI na základe výrazu alebo upravuje reťazec. Inštrukcie sa vykonávajú v poradí v konfiguračnom súbore. Upozorňujeme, že prepísanie výrazov platí iba pre relatívne cesty. Ak chcete párovať hostname, mali by ste použiť if príkazy, napríklad nižšie: if( $host ~* www\.(. *) )
{ Set $host_without_www $1; prepis ^(.*)$ http://$host_without_www$1permanent;
}
5. Príkaz Set Syntax: setvariable value; Predvolené: žiadne; Prostredie používania: server, lokalita, ak; Táto smernica sa používa na definovanie premennej a priradenie jej hodnoty. Hodnota premennej môže byť text, premenná alebo zjednotenie textových premenných. Príklad: set$varname "hello world";
6.Uninitialized_variable_warn pokyny Syntax: uninitialized_variable_warnon|off Prostredie používania: http, server, lokalita, ak Tento príkaz sa používa na zapnutie a vypnutie varovnej správy pre neinicializované premenné a predvolená hodnota je Zapnuté.
Päť. Príklad písania pravidiel Nginx Rewrite 1. Keď pristupovaný súbor a adresár neexistujú, presmerujte na určitý php súbor if( !-e $request_filename )
{ prepísať ^/(.*)$ index.php na konci;
}
2. Výmena adresárov /123456/xxxx ====> /xxxx?id=123456 prepísať ^/(\d+)/(.+)/ /$2?id=$1 posledný;
3. Ak klient používa prehliadač IE, presmeruje ho do adresára /ie if( $http_user_agent ~ MSIE)
{ prepis ^(.*)$ /ie/$1 prestávka;
}
4. Zakázať prístup k viacerým adresárom Lokalita ~ ^/(cron|templates)/
{ popierať všetko; prestávka;
}
5. Zakázať prístup k súborom začínajúcim na /data Poloha ~ ^/Data
{ popierať všetko;
}
6. Zakázať prístup k súborom s príponami .sh, .flv .mp3 Poloha ~ .*\. (sh|flv|mp3)$
{ return 403;
}
7. Nastavte čas cache prehliadača pre určité typy súborov Poloha ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ vyprší 30d;
} Poloha ~ .*\. (js|css)$
{ vyprší 1 hodina;
}
8. Nastaviť časy expirácie pre favicon.ico a robots.txt; Tu je favicon.ico 99 dní, robots.txt 7 dní a záznam chýb 404 nie je zaznamenaný Lokalita ~(favicon.ico) { log_not_found odíď; expiruje 99d; prestávka;
} Poloha ~(robots.txt) { log_not_found odíď; vyprší 7d; prestávka;
}
9. Stanoviť dobu platnosti určitého dokumentu; Je to 600 sekúnd a prístupové záznamy sa nezaznamenávajú location ^~ /html/scripts/loadhead_1.js { access_log preč; root /opt/lampp/htdocs/web; expiruje 600; prestávka;
}
10. Anti-hotlink súbory a nastavenie časov expirácie Return412 tu je vlastný HTTP stavový kód, ktorý je predvolene nastavený na 403, čo je pohodlné na nájdenie správneho hotlink požiadavky "prepis ^/ ; "Zobrazuje obrázok anti-hotlinku "access_log choď;" Nie sú zaznamenávané žiadne prístupové záznamy, čo znižuje stres "Expiruje 3D" 3 dni cache prehliadača pre všetky súbory
Poloha ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers žiadne zablokované *.xx.com*.xx.net localhost 208.97.167.194; ak ($invalid_referer) { Prepis ^/ ; return 412; prestávka;
} access_log preč; root /opt/lampp/htdocs/web; vyprší 3d; prestávka;
}
11. Povoľte pevný IP prístup na webovú stránku len s heslom
root /opt/htdocs/www; povoliť 208.97.167.194; povoliť 222.33.1.2; povoliť 231.152.49.4; popierať všetko; auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswd;
12Konvertujte súbory z viacúrovňových adresárov do jedného súboru na zvýšenie SEO efektov
/job-123-456-789.html 指向/job/123/456/789.html
prepísať^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html posledný;
13. Presmerovanie, keď súbory a adresáre neexistujú:
if (!-e $request_filename) { proxy_pass http://127.0.0.1;
}
14. Nasmerujte priečinok v koreňovom adresári na adresár úrovne 2 Napríklad /shanghaijob/ ukazuje na /area/shanghai/ Ak zmeníte posledné na trvalé, adresný riadok prehliadača bude /location/shanghai/ prepísať ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; Problém s vyššie uvedeným príkladom je, že sa nezhoduje pri prístupe k /shanghai prepísať ^/([0-9A-Z]+)job$ /area/$1/ na posledný; prepísať ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; Týmto spôsobom/Shanghai je tiež prístupný, ale relevantné odkazy na stránke nie sú dostupné, Ak je ./list_1.html skutočná adresa /area/shanghia/list_1.html sa zmení na /list_1.html, čím sa stane neprístupnou. Potom nemôžem pridať automatické skákanie (-d $request_filename) má podmienku, že to musí byť skutočný adresár, a moje prepísanie nie je, takže to nemá žiadny vplyv if (-d $request_filename){ prepísať ^/(.*)([^/])$ http://$host/$1$2/permanent;
} Je to jednoduché, keď už poznáš dôvod, nechaj ma skočiť manuálne prepísať ^/([0-9a-z]+)job$ /$1job/permanent; prepísať ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
15. Preskakovanie doménových mien Server
{ počúvať 80; server_name jump.linuxidc.com; index index.html index.htm index.php; root /opt/lampp/htdocs/www; prepis ^/ http://www.xx.com/; access_log preč;
}
16. Viacdoménové otáčanie server_name www.xx.comwww.xx.com; index index.html index.htm index.php; root /opt/lampp/htdocs; if ($host ~ "linuxidc\.net") { prepísať ^(.*) http://www.xx.com$1permanent;
}
6. Nginx globálne premenné arg_PARAMETER #这个变量包含GET请求中, ak existuje premenná PARAMETER. args #这个变量等于请求行中 parametre (GET request), napr. foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Tieto údaje sú presné aj v prípade prerušenia spojenia. content_length #请求头中的Content-dĺžkové ihrisko. content_type #请求头中的Content-typ odboru. cookie_COOKIE #cookie hodnotu premennej COOKIE document_root #当前请求在root指令中指定的值. document_uri #与uri相同. hostiteľ #请求主机头字段, inak názov servera. Hostname #Set na hostiteľské meno stroja, ako ho vráti gethostname http_HEADER is_args #如果有args参数 táto premenná je rovná "?", inak je rovná "", nulová hodnota. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, zvyčajne GET alebo POST. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth Používateľské meno overené modulom Basic. request_completion #如果请求结束, nastav to na OK. Vyprázdniť, keď požiadavka nie je dokončená alebo ak požiadavka nie je posledná v reťazci požiadaviek. request_method #GET或POST request_filename #当前请求的文件路径, generované koreňovými alebo aliasovými smernicami a URI požiadavkami. request_uri #包含请求参数的原始URI neobsahuje názov hostiteľa, napríklad "/foo/bar.php?arg=baz". Nedá sa upraviť. Schéma #HTTP方法 (napr. HTTP, https). server_protocol #请求使用的协议, zvyčajne HTTP/1.0 alebo HTTP/1.1. server_addr #服务器地址 túto hodnotu možno určiť po dokončení systémového volania. server_name #服务器名称. server_port #请求到达服务器的端口号.
Sedem. Korešpondencia medzi pravidlami Apache a Nginx Apacheov RewriteCond zodpovedá Nginxovmu, ak Apache's RewriteRule zodpovedá Nginxovmu prepísaniu Apacheho [R] zodpovedá Nginxovmu presmerovaniu [P] v jazyku Apache zodpovedá poslednému v jazyku Nginx Apacheho [R,L] zodpovedá Nginxovmu presmerovaniu Apacheho [P,L] zodpovedá poslednému Nginxu Apacheho [PT,L] zodpovedá poslednému Nginxu
Napríklad povoliť prístup k tejto stránke špecifikovanej doméne a vždy sa obrátiť na www.xx.com iné domény Apache: RewriteCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC] RewriteCond %{HTTP_HOST} !^localhost$ RewriteCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $ RewriteRule ^/(.*)$ http://www.xx.com[R,L]
Nginx: if( $host ~* ^(.*)\.aaa\.com$ )
{ nastavený $allowHost '1';
} if( $host ~* ^localhost )
{ nastavený $allowHost '1';
} if( $host ~* ^192\.168\.1\.(. *?) $ )
{ nastavený $allowHost '1';
} if( $allowHost !~ '1' )
{ prepísať ^/(.*)$ http://www.xx.comredirect ;
}
|