Ett. Reguljär uttrycksmatchning, där: * ~ är kasuskänslig matchning * ~* är en enkelfallskänslig matchning * !~ och !~* är mellanlägeskänsliga respektive kasus-känsliga mismatcher Två. fil- och katalogmatchar, där: * -f och !-f används för att avgöra om en fil finns * -d och !-d används för att avgöra om en katalog existerar * -e och !-e används för att avgöra om en fil eller katalog existerar * -x och !-x används för att avgöra om en fil är körbar eller inte 3. Den sista parametern i omskrivningsinstruktionen är flaggmarkeringen, som är markerad med: 1.last är ekvivalent med [L]-märket i Apache, vilket betyder omskrivning. 2. Brytning Efter att matchningen av denna regel är klar avslutas matchningen och de efterföljande reglerna kommer inte längre att matchas. 3.redirect returnerar 302 temporär omdirigering, och webbläsaradressen visar URL-adressen efter hoppet. 4.permanent return 301 permanent omdirigering, webbläsaradressen visar URL-adressen efter hoppet.
Använd last och break för att implementera URI-omskrivningar, och webbläsarens adressfält förblir oförändrat. Och det finns en liten skillnad mellan de två, att använda aliaskommandot måste markeras med sist; När du använder proxy_pass direktiv måste du använda breaktaggen. Efter att den sista taggen har körts i denna omskrivningsregel kommer den att finnas på server{......} taggen initierar förfrågan igen, medan break-taggen avslutar matchen efter att regelmatchen är klar. Till exempel: om vi omdirigerar en URL som /photo/123456 till /path/to/photo/12/1234/123456.png skriv om "/foto/([0-9]{2})([0-9]{2})([0-9]{2})"/väg/till/foto/$1/$1$2/$1$2$3.png ;
Fyra. NginxOmskrivningsregel
1. bryt kommandot Användningsmiljö: server, plats, om; Direktivet fullbordar det aktuella regelverket och hanterar inte längre omskrivningsdirektivet.
2. Om direktiv Användningsmiljö: server, plats Denna instruktion används för att kontrollera om ett villkor är uppfyllt, och i så fall exekvere satsen inuti de krumliga klamrarna. If-kommandot stöder inte nesting, och stöder inte flera villkor && och || Behandling.
3. återvänd kommando syntax: returncode ; Användningsmiljö: server, plats, om; Denna instruktion används för att avsluta exekveringen av regeln och returnera en statuskod till klienten. Exempel: Om den besökta URL:en slutar på ".sh" eller ".bash" returneras en 403-statuskod plats ~ .*\. (sh|bash)?$
{ retur 403;
}
4. omskriv kommandot Syntax: rewriteregex ersättningsflagga Användningsmiljö: server, plats, om Denna direktiv omdirigerar URI:n baserat på uttrycket, eller modifierar strängen. Instruktionerna körs i den ordning som finns i konfigurationsfilen. Observera att omskrivning av uttryck endast gäller för relativa vägar. Om du vill para värdnamn bör du använda if-satser, till exempel nedan: om( $host ~* www\.(. *) )
{ Sätt $host_without_www $1; omskriv ^(.*)$ http://$host_without_www$1permanent;
}
5. Sätt kommando Syntax: mängdvariabelvärde; Standard: inga; Användningsmiljö: server, plats, om; Denna direktiv används för att definiera en variabel och tilldela ett värde till den. Värdet på en variabel kan vara text, variabel eller union av textvariabler. Exempel: set$varname "hello world";
6.Uninitialized_variable_warn instruktioner Syntax: uninitialized_variable_warnon|off Användningsmiljö: http, server, plats, om Detta kommando används för att slå på och av varningsmeddelandet för oinitierade variabler, och standardvärdet är På.
Fem. Nginx Rewrite regelskrivningsexempel 1. När den åtkomstfilen och katalogen inte finns, omdirigera till en viss php-fil if( !-e $request_filnamn )
{ omskriv ^/(.*)$ index.php sist;
}
2. Katalogbyte /123456/xxxx ====> /xxxx?id=123456 omskriv ^/(\d+)/(.+)/ /$2?id=$1 sist;
3. Om klienten använder IE-webbläsaren omdirigerar den till /ie-katalogen if( $http_user_agent ~ MSIE)
{ omskrivning ^(.*)$ /ie/$1 break;
}
4. Inaktivera åtkomst till flera kataloger plats ~ ^/(cron|mallar)/
{ förneka allt; paus;
}
5. Inaktivera åtkomst till filer som börjar med /data Plats ~ ^/data
{ förneka allt;
}
6. Förbjud åtkomst till filer med filsuffixnamn .sh, .flv, .mp3 plats ~ .*\. (sh|flv|mp3)$
{ retur 403;
}
7. Ställ in webbläsarens cachetid för vissa typer av filer plats ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ går ut med 30 pence;
} plats ~ .*\. (js|css)$
{ går ut 1 timme;
}
8. Sätt utgångstider för favicon.ico och robots.txt; Här är favicon.ico 99 dagar, och robots.txt 7 dagar, och 404-felloggen loggas inte plats ~(favicon.ico) { log_not_found av; går ut 99d; paus;
} plats ~(robots.txt) { log_not_found av; går ut 7d; paus;
}
9. Fastställ utgångstiden för ett visst dokument; Detta är 600 sekunder, och åtkomstloggar registreras inte plats ^~ /html/scripts/loadhead_1.js { access_log av; root /opt/lampp/htdocs/web; går ut 600; paus;
}
10. Anti-hotlink-filer och inställda utgångstider Return412 här är en anpassad HTTP-statuskod, som som standard är 403, vilket är bekvämt för att hitta rätt hotlink-förfrågan "omskrivning ^/ ; "Visar en bild på en anti-hotlink "access_log av;" Inga åtkomstloggar registreras, vilket minskar stressen "Expiry 3D" 3 dagars webbläsarcache för alla filer
plats ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers ingen blockerade *.xx.com*.xx.net localhost 208.97.167.194; om ($invalid_referer) { Omskriv ^/ ; Tillbakagång 412; paus;
} access_log av; root /opt/lampp/htdocs/web; går ut 3D; paus;
}
11. Tillåt endast fast IP-åtkomst till webbplatsen med ett lösenord
root /opt/htdocs/www; allow 208.97.167.194; allow 222.33.1.2; tillåt 231.152.49.4; förneka allt; auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswd;
12Konvertera filer i flernivåkataloger till en fil för att förbättra SEO-effekter
/job-123-456-789.html 指向/job/123/456/789.html
omskriv^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html sist;
13. Omdirigera när filer och kataloger inte finns:
om (!-e $request_filnamn) { proxy_pass http://127.0.0.1;
}
14. Peka en mapp i rotkatalogen till nivå 2-katalogen Till exempel pekar /shanghaijob/ på /area/shanghai/ Om du ändrar last till permanent kommer webbläsarens adressfält att vara /location/shanghai/ omskriv ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last; Problemet med exemplet ovan är att det inte kommer att stämma när man går åt /shanghai skriv om ^/([0-9A-Z]+)jobb$/område/$1/ sist; omskriv ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last; På detta sätt är Shanghai också tillgängligt, men de relaterade länkarna på sidan är inte tillgängliga, Om ./list_1.html riktiga adress är /area/shanghia/list_1.html blir det /list_1.html, vilket gör det otillgängligt. Då kan jag inte lägga till automatiskt hoppande (-d $request_filnamn) har villkoret att det måste vara en riktig katalog, och min omskrivning är det inte, så det har ingen effekt om (-d $request_filnamn){ omskriv ^/(.*)([^/])$ http://$host/$1$2/permanent;
} Det är lätt att göra efter att ha fått veta orsaken, låt mig hoppa manuellt omskriv ^/([0-9A-Z]+)Job$ /$1Job/permanent; omskriv ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;
15. Domännamnshopp server
{ lyssna 80; server_name jump.linuxidc.com; index index.html index.htm index.php; root /opt/lampp/htdocs/www; omskrivning ^/ http://www.xx.com/; access_log av;
}
16. Multidomän-växling server_name www.xx.comwww.xx.com; index index.html index.htm index.php; root /opt/lampp/htdocs; If ($host ~ "linuxidc\.net") { omskriv ^(.*) http://www.xx.com$1permanent;
}
6. nginx globala variabler arg_PARAMETER #这个变量包含GET请求中, om det finns en variabel PARAMETER. args #这个变量等于请求行中 (GET-förfrågan) parametrar, t.ex. foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Denna data är korrekt även om anslutningen avbryts. content_length #请求头中的Content längds fält. content_type #请求头中的Content-typ fält. cookie_COOKIE #cookie värdet på COOKIE-variabeln document_root #当前请求在root指令中指定的值. document_uri #与uri相同. värd #请求主机头字段, annars servernamnet. Värdnamn #Set till maskinens värdnamn som returneras av gethostname http_HEADER is_args #如果有args参数 är denna variabel lika med "?", annars lika med "", nollvärde. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, oftast FÅ eller POSTA. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth Användarnamn validerat av Basic Module. request_completion #如果请求结束, ställ in den på OK. Töm när förfrågan inte är klar eller om förfrågan inte är den sista i förfrågningskedjan. request_method #GET或POST request_filename #当前请求的文件路径, genererat av root- eller aliasdirektiv och URI-förfrågningar. request_uri #包含请求参数的原始URI innehåller den inte värdnamnet, t.ex. "/foo/bar.php?arg=baz". Kan inte ändras. schema #HTTP方法 (t.ex. http, https). server_protocol #请求使用的协议, vanligtvis HTTP/1.0 eller HTTP/1.1. server_addr #服务器地址 kan detta värde bestämmas efter att ett systemanrop har slutförts. server_name #服务器名称. server_port #请求到达服务器的端口号.
Sju. Korrespondens mellan Apache- och Nginx-regler Apaches omskrivningsCond motsvarar Nginx om Apaches omskrivningsregel motsvarar Nginx omskrivning Apaches [R] motsvarar Nginx omdirigering [P] i Apache motsvarar det sista i Nginx Apaches [R,L] motsvarar Nginx omdirigering Apaches [P,L] motsvarar Nginx sista Apaches [PT,L] motsvarar Nginx sista
Till exempel, låt ett angivet domännamn komma åt denna sida och vänd dig alltid till www.xx.com andra domännamn 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: om( $host ~* ^(.*)\.aaa\.com$ )
{ satte $allowHost '1';
} if( $host ~* ^localhost )
{ satte $allowHost '1';
} om( $host ~* ^192\.168\.1\.(. *?) $ )
{ satte $allowHost '1';
} om( $allowHost !~ '1' )
{ omskriv ^/(.*)$ http://www.xx.comredirect ;
}
|