En. Regulært udtryksmatch, hvor: * ~ er kasusfølsom matching * ~* er et case-insensitive match * !~ og !~* er henholdsvis kasusfølsomme og små bogstavs-insensitive mismatches To. fil- og mappematcher, hvor: * -f og !-f bruges til at afgøre, om en fil eksisterer * -d og !-d bruges til at afgøre, om en mappe eksisterer * -e og !-e bruges til at afgøre, om en fil eller mappe eksisterer * -x og !-x bruges til at afgøre, om en fil er eksekverbar eller ej 3. Den sidste parameter i omskrivningsinstruktionen er flagmærket, som er markeret med: 1.last svarer til [L]-mærket i Apache, hvilket betyder omskrivning. 2. Pause Efter at denne regel er matchet, afsluttes matchningen, og de efterfølgende regler matches ikke længere. 3.redirect returnerer 302 midlertidig omdirigering, og browseradressen vil vise URL-adressen efter springet. 4.permanent returner 301 permanent omdirigering, browseradressen vil vise URL-adressen efter springet.
Brug sidst og break til at implementere URI-omskrivninger, og browserens adresselinje forbliver uændret. Og der er en lille forskel mellem de to, at brug af alias-kommandoen skal markeres med sidst; Når du bruger proxy_pass direktiver, skal du bruge break-tagget. Efter det sidste tag er udført i denne omskrivningsregel, vil det være på serveren{......} Tag genstarter anmodningen, mens break tag afslutter kampen, når regelmatchen er afsluttet. For eksempel: hvis vi omdirigerer en URL som /photo/123456 til /path/to/photo/12/1234/123456.png omskriv "/foto/([0-9]{2})([0-9]{2})([0-9]{2})"/sti/til/foto/$1/$1$2/$1$2$3.png ;
Fire. NginxRewrite-reglen
1. bryde kommandoen Brugsmiljø: server, placering, hvis; Direktivet fuldender det nuværende regelsæt og håndterer ikke længere omskrivningsdirektivet.
2. Hvis direktivt Brugsmiljø: server, placering Denne instruktion bruges til at kontrollere, om en betingelse er opfyldt, og hvis ja, udføre sætningen inde i krølleparentes. If-kommandoen understøtter ikke indlejring, og understøtter ikke flere betingelser &&& og || Behandling.
3. returner-kommando syntaks: returncode ; Brugsmiljø: server, placering, hvis; Denne instruktion bruges til at afslutte eksekveringen af reglen og returnere en statuskode til klienten. Eksempel: Hvis den besøgte URL ender på ".sh" eller ".bash", returneres en 403-statuskode Beliggenhed ~ .*\. (sh|bash)?$
{ retur 403;
}
4. omskriv kommandoen Syntaks: rewriteregex erstatningsflag Brugsmiljø: server, lokation, hvis Denne direktiv omdirigerer URI'en baseret på udtrykket eller ændrer strengen. Instruktioner udføres i den rækkefølge, der står i konfigurationsfilen. Bemærk, at omskrivning af udtryk kun gælder for relative stier. Hvis du vil parre værtsnavne, bør du bruge if-sætninger, for eksempel nedenfor: hvis( $host ~* www\.(. *) )
{ sæt $host_without_www $1; omskriv ^(.*)$ http://$host_without_www$1permanent;
}
5. Sæt kommando Syntaks: setvariabelværdi; Standard: ingen; Brugsmiljø: server, placering, hvis; Denne direktiv bruges til at definere en variabel og tildele den en værdi. Værdien af en variabel kan være tekst, variabel eller union af tekstvariabler. Eksempel: set$varname "hello world";
6.Uninitialized_variable_warn instruktioner Syntaks: uninitialized_variable_warnon|off Brugsmiljø: http, server, lokation, hvis Denne kommando bruges til at tænde og slå advarselsmeddelelsen for ikke-initialiserede variabler fra, og standardværdien er Tændt.
Fem. Eksempel på Nginx Rewrite regelskrivning 1. Når den tilgåede fil og mappe ikke eksisterer, omdirigeres til en bestemt php-fil if( !-e $request_filnavn )
{ omskriv ^/(.*)$ index.php sidst;
}
2. Mappebytte /123456/xxxx ====> /xxxx?id=123456 omskriv ^/(\d+)/(.+)/ /$2?id=$1 sidst;
3. Hvis klienten bruger IE-browseren, omdirigerer den til /ie-mappen if( $http_user_agent ~ MSIE)
{ omskrivning ^(.*)$ /ie/$1 break;
}
4. Deaktiver adgangen til flere mapper Placering ~ ^/(cron|skabeloner)/
{ benægte alt; pause;
}
5. Deaktiver adgang til filer, der starter med /data Placering ~ ^/data
{ benægte alt;
}
6. Forbyd adgang til filer med filendelser .sh, .flv, .mp3 Beliggenhed ~ .*\. (sh|flv|mp3)$
{ retur 403;
}
7. Indsæt browserens cache-tid for visse typer filer Beliggenhed ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ udløber 30d;
} Beliggenhed ~ .*\. (js|css)$
{ udløber 1 time;
}
8. Sæt udløbstider for favicon.ico og robots.txt; Her er favicon.ico 99 dage, og robots.txt er 7 dage, og 404-fejlloggen er ikke logget Beliggenhed ~(favicon.ico) { log_not_found væk; udløber 99d; pause;
} placering ~(robots.txt) { log_not_found væk; udløber 7d; pause;
}
9. Fastsætte udløbstiden for et bestemt dokument; Dette er 600 sekunder, og adgangsloggene bliver ikke registreret placering ^~ /html/scripts/loadhead_1.js { access_log væk; root /opt/lampp/htdocs/web; udløber 600; pause;
}
10. Anti-hotlink-filer og fastsatte udløbstider Return412 her er en brugerdefineret HTTP-statuskode, som som standard er 403, hvilket er praktisk til at finde den korrekte hotlink-anmodning "omskrivning ^/ ; "Viser et billede af en anti-hotlink "access_log væk;" Der registreres ingen adgangslogge, hvilket reducerer stress "Udløber 3D" 3 dages browsercache for alle filer
Beliggenhed ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers ingen blokerede *.xx.com*.xx.net localhost 208.97.167.194; hvis ($invalid_referer) { omskrivning ^/ ; retur 412; pause;
} access_log væk; root /opt/lampp/htdocs/web; udløber 3D; pause;
}
11. Kun tillad fast IP-adgang til hjemmesiden med en adgangskode
root /opt/htdocs/www; tillade 208.97.167.194; allow 222.33.1.2; tillade 231.152.49.4; benægte alt; auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswd;
12Konverter filer i flerniveau-mapper til én fil for at forbedre SEO-effekterne
/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 sidst;
13. Omdiriger, når filer og mapper ikke eksisterer:
hvis (!-e $request_filnavn) { proxy_pass http://127.0.0.1;
}
14. Peg en mappe i rodmappen til niveau 2-mappen For eksempel peger /shanghaijob/ på /area/shanghai/ Hvis du ændrer sidst til permanent, vil browserens adresselinje være /location/shanghai/ omskrivning ^/([0-9A-Z]+)job/(.*)$ /område/$1/$2last; Problemet med ovenstående eksempel er, at det ikke matcher, når man tilgår /shanghai omskriv ^/([0-9A-Z]+)job$ /område/$1/ sidst; omskrivning ^/([0-9A-Z]+)job/(.*)$ /område/$1/$2last; Denne vej/Shanghai er også tilgængelig, men de relevante links på siden er ikke tilgængelige, Hvis ./list_1.html rigtige adresse er /area/shanghia/list_1.html bliver til /list_1.html, hvilket gør den utilgængelig. Så kan jeg ikke tilføje automatisk hop (-d $request_filename) har en betingelse om, at det skal være en rigtig mappe, og min omskrivning er det ikke, så det har ingen effekt hvis (-d $request_filnavn){ omskriv ^/(.*)([^/])$ http://$host/$1$2/permanent;
} Det er nemt at gøre, når man kender grunden, lad mig hoppe manuelt omskriv ^/([0-9A-Z]+)job$ /$1job/permanent; omskrivning ^/([0-9A-Z]+)job/(.*)$ /område/$1/$2last;
15. Domænenavnsspringning Server
{ lyt 80; server_name jump.linuxidc.com; indeks index.html index.htm index.php; root /opt/lampp/htdocs/www; omskrivning ^/ http://www.xx.com/; access_log væk;
}
16. Multidomæne-drejning server_name www.xx.comwww.xx.com; indeks index.html index.htm index.php; root /opt/lampp/htdocs; If ($host ~ "linuxidc\.net") { omskriv ^(.*) http://www.xx.com$1permanent;
}
6. nginx globale variable arg_PARAMETER #这个变量包含GET请求中, hvis der er en variabel PARAMETER. args #这个变量等于请求行中 (GET-anmodning) parametre, f.eks. foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Disse data er nøjagtige, selv hvis forbindelsen bliver afbrudt. content_length #请求头中的Content bane. content_type #请求头中的Content-type mark. cookie_COOKIE #cookie værdien af COOKIE-variablen document_root #当前请求在root指令中指定的值. document_uri #与uri相同. værten #请求主机头字段, ellers serverens navn. Værtsnavn #Set til maskinens værtsnavn, som returneret af gethostname http_HEADER is_args #如果有args参数 er denne variabel lig med "?", ellers lig med "", nulværdi. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, som regel FÅ eller POST. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth Brugernavn valideret af Basic Module. request_completion #如果请求结束, sæt den til OK. Tøm, når anmodningen ikke er færdig, eller hvis anmodningen ikke er den sidste i anmodningskæden. request_method #GET或POST request_filename #当前请求的文件路径, genereret af root- eller alias-direktiver og URI-anmodninger. request_uri #包含请求参数的原始URI indeholder den ikke værtsnavnet, f.eks. "/foo/bar.php?arg=baz". kan ikke ændres. Scheme #HTTP方法 (f.eks. HTTP, https). server_protocol #请求使用的协议, som regel HTTP/1.0 eller HTTP/1.1. server_addr #服务器地址 kan denne værdi bestemmes, efter at et systemkald er afsluttet. server_name #服务器名称. server_port #请求到达服务器的端口号.
Syv. Overensstemmelse mellem Apache- og Nginx-reglerne Apaches omskrivningsCond svarer til Nginx', hvis Apaches RewriteRule svarer til Nginx' omskrivning Apaches [R] svarer til Nginx' omdirigering [P] i Apache svarer til sidste i Nginx Apaches [R,L] svarer til Nginx' omdirigering Apaches [P,L] svarer til Nginx' sidste Apaches [PT,L] svarer til Nginx' sidste
For eksempel skal du tillade et angivet domænenavn at få adgang til dette site, og altid vende dig mod www.xx.com andre domænenavne 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$ )
{ sæt $allowHost '1';
} if( $host ~* ^localhost )
{ sæt $allowHost '1';
} hvis( $host ~* ^192\.168\.1\.(. *?) $ )
{ sæt $allowHost '1';
} hvis( $allowHost !~ '1' )
{ omskriv ^/(.*)$ http://www.xx.comredirect ;
}
|