Én. Regulært uttrykksmatch, hvor: * ~ er kasusfølsom matching * ~* er en case-insensitiv match * !~ og !~* er henholdsvis små og små bokstav-sensitive mismatcher To. fil- og katalog matcher, hvor: * -f og !-f brukes for å avgjøre om en fil eksisterer * -d og !-d brukes for å avgjøre om en katalog eksisterer * -e og !-e brukes for å avgjøre om en fil eller katalog eksisterer * -x og !-x brukes for å avgjøre om en fil er kjørbar eller ikke 3. Den siste parameteren i omskrivingsinstruksjonen er flaggmerket, som er merket med: 1.last tilsvarer [L]-merket i Apache, som betyr omskriving. 2. Pause Etter at denne regelen er fullført, avsluttes matchingen og de påfølgende reglene blir ikke lenger matchet. 3.omdirigering returnerer 302 midlertidig omdirigering, og nettleseradressen vil vise URL-adressen etter hoppet. 4.permanent returner 301 permanent omdirigering, nettleseradressen vil vise URL-adressen etter hoppet.
Bruk siste og break for å implementere URI-omskrivinger, og nettleserens adressefelt forblir uendret. Og det er en liten forskjell mellom de to, bruk av alias-kommandoen må markeres med sist; Når du bruker proxy_pass direktiver, må du bruke break-taggen. Etter at den siste taggen er kjørt i denne omskrivingsregelen, vil den være på server{......} tag starter forespørselen på nytt, mens break tag avslutter kampen etter at regel-matchen er fullført. For eksempel: hvis vi omdirigerer en URL som /photo/123456 til /path/to/photo/12/1234/123456.png skriv om "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;
Fire. NginxRewrite-regelen
1. bryt kommandoen Bruksmiljø: server, lokasjon, hvis; Direktivet fullfører det nåværende regelsettet og håndterer ikke lenger omskrivingsdirektivet.
2. Hvis direktiv Bruksmiljø: server, lokasjon Denne instruksjonen brukes til å sjekke om en betingelse er oppfylt, og hvis ja, utføre setningen inne i krølleparentesene. If-kommandoen støtter ikke nesting, og støtter ikke flere betingelser &&& og || Behandling.
3. returner-kommando syntaks: returnkode ; Bruksmiljø: server, lokasjon, hvis; Denne instruksjonen brukes til å avslutte utførelsen av regelen og returnere en statuskode til klienten. Eksempel: Hvis den besøkte URL-en ender på ".sh" eller ".bash", returneres en 403-statuskode Sted ~ .*\. (sh|bash)?$
{ retur 403;
}
4. omskrivingskommando Syntaks: rewriteregex erstatningsflagg Bruksmiljø: server, lokasjon, hvis Dette direktivet omdirigerer URI-en basert på uttrykket, eller endrer strengen. Instruksjoner utføres i den rekkefølgen som i konfigurasjonsfilen. Merk at omskriving av uttrykk kun gjelder for relative stier. Hvis du vil pare vertsnavn, bør du bruke if-setninger, for eksempel nedenfor: hvis( $host ~* www\.(. *) )
{ sett $host_without_www $1; omskrive ^(.*)$ http://$host_without_www$1permanent;
}
5. Sett kommando Syntaks: setvariabelverdi; Standard: ingen; Bruksmiljø: server, lokasjon, hvis; Dette direktivet brukes til å definere en variabel og tildele en verdi til den. Verdien av en variabel kan være tekst, variabel eller union av tekstvariabler. Eksempel: set$varname "hello world";
6.Uninitialized_variable_warn instruksjoner Syntaks: uninitialized_variable_warnon|off Bruksmiljø: http, server, lokasjon, hvis Denne kommandoen brukes til å slå på og av advarselsmeldingen for uinitialiserte variabler, og standardverdien er På.
Fem. Eksempel på Nginx Rewrite regelskriving 1. Når den aksesserte filen og katalogen ikke eksisterer, omdiriger til en bestemt php-fil if( !-e $request_filnavn )
{ omskriv ^/(.*)$ index.php sist;
}
2. Katalogbytte /123456/xxxx ====> /xxxx?id=123456 omskriv ^/(\d+)/(.+)/ /$2?id=$1 sist;
3. Hvis klienten bruker IE-nettleseren, omdirigerer den til /ie-katalogen if( $http_user_agent ~ MSIE)
{ omskriving ^(.*)$ /ie/$1 break;
}
4. Deaktiver tilgang til flere kataloger Sted ~ ^/(Cron|maler)/
{ nekte alt; pause;
}
5. Deaktiver tilgang til filer som starter med /data Lokasjon ~ ^/data
{ nekte alt;
}
6. Forby tilgang til filer med filsuffiksnavn .sh, .flv, .mp3 Sted ~ .*\. (sh|flv|mp3)$
{ retur 403;
}
7. Sett nettleserens cache-tid for visse typer filer Sted ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ utløper 30d;
} Sted ~ .*\. (js|css)$
{ utløper 1 time;
}
8. Sett utløpstider for favicon.ico og robots.txt; Her er favicon.ico 99 dager, og robots.txt 7 dager, og 404-feilloggen loggføres ikke lokasjon ~(favicon.ico) { log_not_found av; utløper 99d; pause;
} sted ~(robots.txt) { log_not_found av; utløper 7d; pause;
}
9. Fastsette utløpstiden for et bestemt dokument; Dette er 600 sekunder, og tilgangslogger blir ikke registrert lokasjon ^~ /html/scripts/loadhead_1.js { access_log av; root /opt/lampp/htdocs/web; utløper 600; pause;
}
10. Anti-hotlink-filer og faste utløpstider Return412 her er en egendefinert HTTP-statuskode, som som standard er 403, noe som er praktisk for å finne riktig hotlink-forespørsel "omskriving ^/ ; "Viser et bilde av en anti-hotlink "access_log av;" Det føres ingen tilgangslogger, noe som reduserer stresset "Utløper 3D" 3 dagers nettlesercache for alle filer
Sted ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers ingen blokkerte *.xx.com*.xx.net localhost 208.97.167.194; hvis ($invalid_referer) { omskriving ^/ ; retur 412; pause;
} access_log av; root /opt/lampp/htdocs/web; utløper 3D; pause;
}
11. Kun tillate fast IP-tilgang til nettsiden med passord
rot /opt/htdocs/www; allow 208.97.167.194; tillat 222.33.1.2; allow 231.152.49.4; nekte alt; auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswed;
12Konverter filer i flernivåkataloger til én fil for å forbedre SEO-effektene
/job-123-456-789.html 指向/job/123/456/789.html
omskrive^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html sist;
13. Omdiriger når filer og kataloger ikke eksisterer:
hvis (!-e $request_filename) { proxy_pass http://127.0.0.1;
}
14. Pek en mappe i rotkatalogen til nivå 2-katalogen For eksempel peker /shanghaijob/ til /area/shanghai/ Hvis du endrer last til permanent, vil nettleserens adressefelt være /location/shanghai/ omskrive ^/([0-9A-Z]+)jobb/(.*)$ /område/$1/$2last; Problemet med eksempelet ovenfor er at det ikke vil matche når man får tilgang til /shanghai skriv om ^/([0-9A-Z]+)jobb$ /område/$1/ sist; omskrive ^/([0-9A-Z]+)jobb/(.*)$ /område/$1/$2last; Denne veien/Shanghai er også tilgjengelig, men de tilhørende lenkene på siden er ikke tilgjengelige, Hvis ./list_1.html ekte adresse er /area/shanghia/list_1.html blir den til /list_1.html, noe som gjør den utilgjengelig. Da kan jeg ikke legge til automatisk hopping (-d $request_filename) har en betingelse om at det må være en ekte katalog, og min omskriving er det ikke, så det har ingen effekt hvis (-d $request_filnavn){ omskriv ^/(.*)([^/])$ http://$host/$1$2/permanent;
} Det er lett å gjøre når du vet grunnen, la meg hoppe manuelt omskriv ^/([0-9A-Z]+)Job$ /$1Job/permanent; omskrive ^/([0-9A-Z]+)jobb/(.*)$ /område/$1/$2last;
15. Hopping av domenenavn Server
{ Hør 80; server_name jump.linuxidc.com; indeks index.html index.htm index.php; root /opt/lampp/htdocs/www; omskriving ^/ http://www.xx.com/; access_log av;
}
16. Multidomene-dreiing server_name www.xx.comwww.xx.com; indeks index.html index.htm index.php; root /opt/lampp/htdocs; hvis ($host ~ "linuxidc\.net") { omskriv ^(.*) http://www.xx.com$1permanent;
}
6. nginx globale variabler arg_PARAMETER #这个变量包含GET请求中, hvis det finnes en variabel PARAMETER. args #这个变量等于请求行中 (GET-forespørsel) parametere, f.eks. foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Disse dataene er nøyaktige selv om forbindelsen blir brutt. content_length #请求头中的Content-lengde felt. content_type #请求头中的Content-type felt. cookie_COOKIE #cookie verdien av COOKIE-variabelen document_root #当前请求在root指令中指定的值. document_uri #与uri相同. vert #请求主机头字段, ellers servernavnet. Vertsnavn #Set til maskinens vertsnavn returnert av gethostname http_HEADER is_args #如果有args参数 er denne variabelen lik "?", ellers lik "", nullverdi. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, vanligvis FÅ eller POST. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth brukernavn validert av Basic-modulen. request_completion #如果请求结束, sett det til OK. Tom når forespørselen ikke er ferdig eller hvis forespørselen ikke er den siste i forespørselskjeden. request_method #GET或POST request_filename #当前请求的文件路径, generert av rot- eller alias-direktiver og URI-forespørsler. request_uri #包含请求参数的原始URI inneholder den ikke vertsnavnet, f.eks. "/foo/bar.php?arg=baz". kan ikke endres. skjema #HTTP方法 (f.eks. http, https). server_protocol #请求使用的协议, vanligvis HTTP/1.0 eller HTTP/1.1. server_addr #服务器地址 kan denne verdien bestemmes etter at et systemkall er fullført. server_name #服务器名称. server_port #请求到达服务器的端口号.
Sytten. Samsvar mellom Apache- og Nginx-reglene Apaches omskrivingsCond tilsvarer Nginx sin hvis Apaches RewriteRule tilsvarer Nginx sin omskriving Apaches [R] tilsvarer Nginx sin omdirigering [P] i Apache tilsvarer siste i Nginx Apaches [R,L] tilsvarer Nginx sin omdirigering Apaches [P,L] tilsvarer Nginx sin siste Apaches [PT,L] tilsvarer Nginx sin siste
For eksempel, la et spesifisert domenenavn få tilgang til dette nettstedet, og vend deg alltid til www.xx.com andre domenenavn 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: hvis( $host ~* ^(.*)\.aaa\.com$ )
{ satt $allowHost '1';
} Hvis( $host ~* ^localhost )
{ satt $allowHost '1';
} Hvis( $host ~* ^192\.168\.1\.(. *?) $ )
{ satt $allowHost '1';
} hvis( $allowHost !~ '1' )
{ omskriv ^/(.*)$ http://www.xx.comredirect ;
}
|