Ena. Ujemanje regularnih izrazov, kjer: * ~ je ujemanje na velike črke * ~* je ujemanje, ki ni občutljivo na velike in črke * !~ in !~* sta velikostno občutljivi na velike in nevelike črke oziroma ne na velike črke Dva. Datoteka in mapa se ujemata, kjer: * -f in !-f se uporabljata za ugotavljanje, ali datoteka obstaja * -d in !-d se uporabljata za ugotavljanje, ali imenik obstaja * -e in !-e se uporabljata za določanje, ali datoteka ali mapa obstaja * -x in !-x se uporabljata za določanje, ali je datoteka izvedljiva ali ne 3. Zadnji parameter ukaza za prepisovanje je oznaka zastavice, ki je označena z: 1.last je enakovredno oznaki [L] v apache, kar pomeni prepisovanje. 2. Prelom Po zaključku ujemanja tega pravila se ujemanje prekine in naslednja pravila se ne bodo več ujemala. 3.redirect vrne 302 začasno preusmeritev, naslov brskalnika pa bo po skoku prikazal URL naslov. 4. Permanent return 301 permanent redirect, naslov brskalnika bo po skoku prikazal URL naslov.
Uporabite last and break za izvajanje prepisov URI, naslovna vrstica brskalnika pa ostane nespremenjena. In obstaja majhna razlika med obema, uporaba ukaza za vzdevek mora biti označena z zadnjim; Pri uporabi proxy_pass direktiv morate uporabiti oznako prekinitev. Ko je zadnja oznaka izvedena v tem pravilu prepisovanja, bo ta na strežniku{......} Tag ponovno sproži zahtevo, medtem ko break tag prekine tekmo po zaključku pravilnega dvoboja. Na primer: če preusmerimo URL, kot je /photo/123456, na /path/to/photo/12/1234/123456.png prepiši "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;
Štiri. Pravilo NginxRewrite
1. Ukaz za prekinitev Uporabniško okolje: strežnik, lokacija, če; Direktiva dopolnjuje trenutni nabor pravil in ne obravnava več direktive za prepisovanje.
2. Če je direktiva Okolje uporabe: strežnik, lokacija To navodilo se uporablja za preverjanje, ali je pogoj izpolnjen, in če je, za izvedbo stavka znotraj zavitih oklepajev. Ukaz If ne podpira gnezdenja in ne podpira več pogojev && in || Zdravljenje.
3. Ukaz za vrnitev sintaksa: povratna koda ; Uporabniško okolje: strežnik, lokacija, če; Ta ukaz se uporablja za konec izvajanja pravila in vrnitev statusne kode odjemalcu. Primer: Če obiskani URL konča na ".sh" ali ".bash", se vrne statusna koda 403 lokacija ~ .*\. (š|bum)?$
{ return 403;
}
4. Ukaz za prepisovanje Sintaksa: zastavica za zamenjavo rewriteregex Uporabniško okolje: strežnik, lokacija, če Ta direktiva preusmeri URI glede na izraz ali spremeni niz. Ukazi se izvajajo v vrstnem redu, kot je v konfiguracijski datoteki. Upoštevajte, da je prepisovanje izrazov veljavno le za relativne poti. Če želite združiti imena gostiteljev, uporabite if stavke, na primer spodaj: if( $host ~* www\.(. *) )
{ set $host_without_www $1; prepis ^(.*)$ http://$host_without_www$1permanent;
}
5. Ukaz Set Sintaksa: setvariable value; Privzeto: nič; Uporabniško okolje: strežnik, lokacija, če; Ta direktiva se uporablja za definiranje spremenljivke in dodelitev njene vrednosti. Vrednost spremenljivke je lahko besedilo, spremenljivka ali unija besedilnih spremenljivk. Primer: set$varname "hello world";
6.Uninitialized_variable_warn navodila Sintaksa: uninitialized_variable_warnon| izklopljeno Uporabniško okolje: http, strežnik, lokacija, če Ta ukaz se uporablja za vklop in izklop opozorilnega sporočila za neinicializirane spremenljivke, privzeta vrednost pa je Vklopljeno.
Pet. Primer pisanja pravil Nginx Rewrite 1. Ko dostopana datoteka in mapa ne obstajata, preusmerite na določeno php datoteko if( !-e $request_filename )
{ prepis ^/(.*)$ index.php zadnji;
}
2. Zamenjava imenikov /123456/xxxx ====> /xxxx?id=123456 prepis ^/(\d+)/(.+)/ /$2?id=$1 zadnji;
3. Če odjemalec uporablja brskalnik IE, preusmeri na mapo /ie if( $http_user_agent ~ MSIE)
{ prepis ^(.*)$ /ie/$1 premor;
}
4. Onemogočite dostop do več imenikov lokacija ~ ^/(cron|templates)/
{ zanikati vse; premor;
}
5. Onemogočite dostop do datotek, ki se začnejo z /data Lokacija ~ ^/podatki
{ zanikati vse;
}
6. Prepovejte dostop do datotek z imeni datotek s priponami .sh, .flv .mp3 lokacija ~ .*\. (sh|flv|mp3)$
{ return 403;
}
7. Nastavite čas predpomnilnika brskalnika za določene vrste datotek lokacija ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ poteče 30d;
} lokacija ~ .*\. (js|css)$
{ poteče 1 uro;
}
8. Določite čas trajanja za favicon.ico in robots.txt; Tukaj je favicon.ico 99 dni, robots.txt 7 dni, zapis napak 404 pa ni zabeležen lokacija ~(favicon.ico) { log_not_found stran; poteče 99d; premor;
} lokacija ~(robots.txt) { log_not_found stran; poteče 7d; premor;
}
9. Določite rok veljavnosti določenega dokumenta; To je 600 sekund, dostopni zapisi pa niso zabeleženi lokacija ^~ /html/scripts/loadhead_1.js { access_log stran; root /opt/lampp/htdocs/web; poteče 600; premor;
}
10. Anti-hotlink datoteke in nastavljene časovne omejitve Return412 tukaj je prilagojena HTTP statusna koda, ki privzeto nastavi 403, kar je priročno za iskanje pravilne zahteve za hotlink "prepis ^/ ; "Prikazuje sliko anti-hotlinka "access_log pojdi;" Dnevniki dostopa niso zabeleženi, kar zmanjšuje stres "Poteče 3D" 3 dni predpomnilnika brskalnika za vse datoteke
Lokacija ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers noben blokiran *.xx.com*.xx.net localhost 208.97.167.194; if ($invalid_referer) { prepis ^/ ; return 412; premor;
} access_log stran; root /opt/lampp/htdocs/web; poteče 3d; premor;
}
11. Dovoliti fiksni IP dostop do spletne strani le z geslom
root /opt/htdocs/www; dovoliti 208.97.167.194; dovoli 222.33.1.2; dovoli 231.152.49.4; zanikati vse; auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswd;
12Pretvorite datoteke v večnivojskih imenikih v eno datoteko za izboljšanje SEO učinkov
/job-123-456-789.html 指向/job/123/456/789.html
prepisati^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html zadnji;
13. Preusmeri, kadar datoteke in imeniki ne obstajajo:
if (!-e $request_filename) { proxy_pass http://127.0.0.1;
}
14. Usmerite mapo v korenski mapi na mapo nivoja 2 Na primer, /shanghaijob/ kaže na /area/shanghai/ Če spremenite last na stalno, bo naslovna vrstica brskalnika /location/shanghai/ prepis ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; Težava zgornjega primera je, da se ne ujema pri dostopu do /shanghai prepis ^/([0-9A-Z]+)job$ /območje/$1/ zadnje; prepis ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; Na ta način/Shanghai je prav tako dostopen, vendar povezave na strani niso na voljo, Če je ./list_1.html pravi naslov /area/shanghia/list_1.html bo postal /list_1.html, kar ga naredi nedostopnega. Potem ne morem dodati samodejnega skakanja (-d $request_filename) ima pogoj, da mora biti pravi imenik, moj prepis pa ni, zato nima učinka if (-d $request_filename){ prepis ^/(.*)([^/])$ http://$host/$1$2/permanent;
} Enostavno je narediti, ko poznaš razlog, dovolite, da skočim ročno prepis ^/([0-9A-Z]+)Job$ /$1Job/Permanent; prepis ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
15. Preskakovanje domen strežnik
{ poslušaj 80; server_name jump.linuxidc.com; indeks index.html index.htm index.php; root /opt/lampp/htdocs/www; prepis ^/ http://www.xx.com/; access_log stran;
}
16. Večdomensko obračanje server_name www.xx.comwww.xx.com; indeks index.html index.htm index.php; root /opt/lampp/htdocs; if ($host ~ "linuxIDC\.net") { prepis ^(.*) http://www.xx.com$1permanent;
}
6. Nginx globalne spremenljivke arg_PARAMETER #这个变量包含GET请求中, če obstaja spremenljivka PARAMETER. args #这个变量等于请求行中 parametre (GET request), npr. foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Ti podatki so točni tudi, če je povezava prekinjena. content_length #请求头中的Content igrišče dolžine. content_type #请求头中的Content-tip polja. cookie_COOKIE #cookie vrednost spremenljivke COOKIE document_root #当前请求在root指令中指定的值. document_uri #与uri相同. gostitelj #请求主机头字段, sicer ime strežnika. ime gostitelja #Set na ime gostitelja stroja, kot ga vrne gethostname http_HEADER is_args #如果有args参数 je ta spremenljivka enaka "?", sicer enaka "", ničelna vrednost. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, običajno GET ali POST. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth Uporabniško ime potrjeno z osnovnim modulom. request_completion #如果请求结束, nastavi na OK. Izprazni, ko zahteva ni končana ali če ni zadnja v verigi zahtev. request_method #GET或POST request_filename #当前请求的文件路径, ki ga generirajo root ali alias direktive in URI zahteve. request_uri #包含请求参数的原始URI ne vsebuje imena gostitelja, npr. "/foo/bar.php?arg=baz". ni mogoče spreminjati. shema #HTTP方法 (npr. HTTP, https). server_protocol #请求使用的协议, običajno HTTP/1.0 ali HTTP/1.1. server_addr #服务器地址 je to vrednost mogoče določiti po zaključku sistemskega klica. server_name #服务器名称. server_port #请求到达服务器的端口号.
Sedem. Povezava med pravili Apache in Nginx Apache's RewriteCond ustreza Nginxovemu, če Apachejevo RewriteRule ustreza Nginxovemu prepisu Apachejev [R] ustreza Nginxovemu preusmerjanju [P] v apachščini ustreza zadnjemu v jeziku Nginx Apachejev [R,L] ustreza Nginxovemu preusmerjanju Apachejev [P,L] ustreza Nginxovemu zadnjemu Apachejev [PT,L] ustreza Nginxovemu zadnjemu
Na primer, dovolite določeni domeni dostop do te strani in se vedno obrnite na www.xx.com druge domene 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$ )
{ nastavljeno $allowHost '1';
} if( $host ~* ^localhost )
{ nastavljeno $allowHost '1';
} if( $host ~* ^192\.168\.1\.(. *?) $ )
{ nastavljeno $allowHost '1';
} if( $allowHost !~ '1' )
{ prepis ^/(.*)$ http://www.xx.comredirect ;
}
|