Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 11719|Odgovoriti: 1

[Web] Primer prikazuje pravilo prepisovanja v Nginx

[Kopiraj povezavo]
Objavljeno na 5. 12. 2014 22:45:25 | | |
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 ;
}





Prejšnji:Sina Weibo skenira kodo in plača 1 cent za prejem letnega bonusa do 2015 juanov
Naslednji:CMD5 razbije geslo za sistemskega administratorja Windows
Objavljeno na 7. 12. 2014 17:25:05 |
Branje in objavljanje nazaj je vrlina
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com