Een. Reguliere expressieovereenkomst, waarbij: * ~ is hoofdlettergevoelige matching * ~* is een hoofdletter-ongevoelige match * !~ en !~* zijn respectievelijk hoofdlettergevoelige en hoofdletter-ongevoelige mismatches Twee. bestand en map overeenkomen, waarbij: * -f en !-f worden gebruikt om te bepalen of er een bestand bestaat * -d en !-d worden gebruikt om te bepalen of er een directory bestaat * -e en !-e worden gebruikt om te bepalen of er een bestand of map bestaat * -x en !-x worden gebruikt om te bepalen of een bestand uitvoerbaar is of niet 3. De laatste parameter van de herschrijfinstructie is het vlagmerk, dat wordt gemarkeerd met: 1.last is gelijk aan het [L]-teken in Apache, wat betekent herschrijven. 2. Break Nadat het matchen van deze regel is voltooid, wordt de match beëindigd en worden de volgende regels niet meer gematcht. 3.redirect geeft 302 tijdelijke redirect terug, en het browseradres toont het URL-adres na de sprong. 4.permanent return 301 permanent redirect, het browseradres toont het URL-adres na de sprong.
Gebruik last en break om URI-herschrijvingen te implementeren, en de adresbalk van de browser blijft ongewijzigd. En er is een klein verschil tussen de twee, het gebruik van het alias-commando moet met last worden gemarkeerd; Bij het gebruik van proxy_pass richtlijnen moet je de breaktag gebruiken. Nadat de laatste tag in deze herschrijfregel is uitgevoerd, bevindt deze zich op de server{......} tag start het verzoek opnieuw, terwijl de break tag de match beëindigt nadat de regelmatch is voltooid. Bijvoorbeeld: als we een URL zoals /photo/123456 doorsturen naar /path/to/photo/12/1234/123456.png herschrijf "/foto/([0-9]{2})([0-9]{2})([0-9]{2})"/pad/naar/foto/$1/$1$2/$1$2$3.png ;
Vier. NginxHerschrijfregel
1. breekcommando Gebruiksomgeving: server, locatie, als; De richtlijn voltooit de huidige regelset en behandelt de herschrijf-richtlijn niet meer.
2. Als het gedirigeerd is Gebruiksomgeving: server, locatie Deze instructie wordt gebruikt om te controleren of aan een voorwaarde is voldaan, en zo ja, de instructie binnen de krulbare haakjes uit te voeren. Het If-commando ondersteunt geen genesing, en ondersteunt geen meerdere voorwaarden && en || Behandeling.
3. Return commando syntaxis: returncode ; Gebruiksomgeving: server, locatie, als; Deze instructie wordt gebruikt om de uitvoering van de regel te beëindigen en een statuscode aan de client terug te geven. Voorbeeld: Als de bezochte URL eindigt op ".sh" of ".bash", wordt een 403-statuscode teruggegeven locatie ~ .*\. (sh|bash)?$
{ terugkeren 403;
}
4. herschrijfcommando Syntaxis: rewriteregex vervangingsvlag Gebruiksomgeving: server, locatie, als Deze richtlijn leidt de URI om op basis van de expressie, of wijzigt de string. Instructies worden uitgevoerd in de volgorde in het configuratiebestand. Let op dat het herschrijven van expressies alleen geldig is voor relatieve paden. Als je hostnamen wilt koppelen, moet je if-statements gebruiken, bijvoorbeeld hieronder: als( $host ~* www\.(. *) )
{ stel $host_without_www $1 in; herschrijf ^(.*)$ http://$host_without_www$1permanent;
}
5. Stel commando in Syntaxis: setvariabelewaarde; Standaard: geen; Gebruiksomgeving: server, locatie, als; Deze richtlijn wordt gebruikt om een variabele te definiëren en een waarde aan deze toe te wijzen. De waarde van een variabele kan tekst, variabele of een unie van tekstvariabelen zijn. Voorbeeld: set$varname "hello world";
6.Uninitialized_variable_warn instructies Syntaxis: uninitialized_variable_warnon|off Gebruiksomgeving: http, server, locatie, als Dit commando wordt gebruikt om het waarschuwingsbericht voor niet-geïnitialiseerde variabelen aan en uit te zetten, en de standaardwaarde is Aan.
Vijf. Nginx Rewrite regelschrijfvoorbeeld 1. Wanneer het geraadpleegde bestand en de map niet bestaan, stuur dan door naar een bepaald php-bestand if( !-e $request_filename )
{ herschrijf ^/(.*)$ index.php laatste;
}
2. Directory-swap /123456/xxxx ====> /xxxx?id=123456 herschrijven ^/(\d+)/(.+)/ /$2?id=$1 laatste;
3. Als de client de IE-browser gebruikt, wordt deze doorgestuurd naar de /ie-directory if( $http_user_agent ~ MSIE)
{ herschrijven ^(.*)$ /ie/$1 break;
}
4. Toegang tot meerdere mappen uitschakelen locatie ~ ^/(cron|sjablonen)/
{ ontken alles; pauze;
}
5. Schakel de toegang uit tot bestanden die beginnen met /data locatie ~ ^/data
{ ontken alles;
}
6. Toegang tot bestanden met bestandsachtervoegsels .sh, .flv .mp3 verbieden locatie ~ .*\. (sh|flv|mp3)$
{ terugkeren 403;
}
7. Stel de browsercachetijd in voor bepaalde soorten bestanden locatie ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ verloopt op 30d;
} locatie ~ .*\. (js|css)$
{ verloopt 1 uur;
}
8. Stel houdbaarheidstijden in voor favicon.ico en robots.txt; Hier is de favicon.ico 99 dagen, de robots.txt 7 dagen, en het 404-foutlogboek wordt niet gelogd locatie ~(favicon.ico) { log_not_found eraf; verloopt 99d; pauze;
} locatie ~(robots.txt) { log_not_found eraf; verloopt 7d; pauze;
}
9. Stel de vervaldatum van een bepaald document vast; Dit is 600 seconden, en toegangslogboeken worden niet geregistreerd locatie ^~ /html/scripts/loadhead_1.js { access_log weg; root /opt/lampp/htdocs/web; verloopt 600; pauze;
}
10. Anti-hotlinkbestanden en ingestelde vervaltijden Return412 hier is een aangepaste HTTP-statuscode, die standaard 403 is, wat handig is om het juiste hotlinkverzoek te vinden "herschrijven ^/ ; "Toont een afbeelding van een anti-hotlink "access_log weg;" Er worden geen toegangslogs bijgehouden, wat stress vermindert "Verloopt 3D" 3 dagen browsercache voor alle bestanden
locatie ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers geen geblokkeerd *.xx.com*.xx.net localhost 208.97.167.194; if ($invalid_referer) { herschrijf ^/ ; Terug 412; pauze;
} access_log weg; root /opt/lampp/htdocs/web; verloopt op 3D; pauze;
}
11. Sta alleen vaste IP-toegang tot de website toe met een wachtwoord
root /opt/htdocs/www; allow 208.97.167.194; allow 222.33.1.2; Sta toe 231.152.49.4; ontken alles; auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswd;
12Converteer bestanden in meerlaagse mappen naar één bestand om SEO-effecten te verbeteren
/job-123-456-789.html 指向/job/123/456/789.html
herschrijven^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html laatste;
13. Omleiden wanneer bestanden en mappen niet bestaan:
if (!-e $request_filename) { proxy_pass http://127.0.0.1;
}
14. Wijs een map in de rootmap naar de level 2-directory Bijvoorbeeld, /shanghaijob/ wijst naar /area/shanghai/ Als je last verandert naar permanent, dan wordt de adresbalk van de browser /locatie/shanghai/ herschrijven ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last ; Het probleem met het bovenstaande voorbeeld is dat het niet overeenkomt bij het openen van /shanghai herschrijven ^/([0-9A-Z]+)job$ /area/$1/ laatste; herschrijven ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last ; Deze route/Shanghai is ook toegankelijk, maar de bijbehorende links op de pagina zijn niet beschikbaar, Als ./list_1.html echte adres /area/shanghia/list_1.html is, wordt het /list_1.html, waardoor het ontoegankelijk wordt. Dan kan ik geen automatisch springen toevoegen (-d $request_bestandsnaam) heeft de voorwaarde dat het een echte map moet zijn, en mijn herschrijving is dat niet, dus het heeft geen effect if (-d $request_filename){ herschrijf ^/(.*)([^/])$ http://$host/$1$2/permanent;
} Het is makkelijk te doen als je de reden weet, laat me handmatig springen herschrijven ^/([0-9A-Z]+)Job$ /$1Job/permanent; herschrijven ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last ;
15. Domeinnaamsprong server
{ luister 80; server_name jump.linuxidc.com; index index.html index.htm index.php; root /opt/lampp/htdocs/www; herschrijven ^/ http://www.xx.com/; access_log weg;
}
16. Multi-domein draaien server_name www.xx.comwww.xx.com; index index.html index.htm index.php; root /opt/lampp/htdocs; If ($host ~ "linuxidc\.net") { herschrijven ^(.*) http://www.xx.com$1permanent;
}
6. nginx globale variabelen arg_PARAMETER #这个变量包含GET请求中, als er een variabele PARAMETER is. args #这个变量等于请求行中 (GET-verzoek) parameters, bijvoorbeeld foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Deze gegevens zijn accuraat, zelfs als de verbinding wordt onderbroken. content_length #请求头中的Content veld van lengte. content_type #请求头中的Content-type veld. cookie_COOKIE #cookie de waarde van de COOKIE-variabele document_root #当前请求在root指令中指定的值. document_uri #与uri相同. host #请求主机头字段, anders de servernaam. Hostnaam #Set naar de hostnaam van themachine zoals teruggegeven door gethostname http_HEADER is_args #如果有args参数 is deze variabele gelijk aan "?", anders gelijk aan "", nulwaarde. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, meestal KRIJG of POST. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth Gebruikersnaam gevalideerd door de Basic Module. request_completion #如果请求结束, zet het op OK. Leeg wanneer het verzoek niet is voltooid of als het verzoek niet het laatste in de verzoekketen is. request_method #GET或POST request_filename #当前请求的文件路径, gegenereerd door root- of alias-instructies en URI-verzoeken. request_uri #包含请求参数的原始URI bevat het de hostnaam niet, bijvoorbeeld "/foo/bar.php?arg=baz". Kan niet worden gewijzigd. schema #HTTP方法 (bijv. http, https). server_protocol #请求使用的协议, meestal HTTP/1.0 of HTTP/1.1. server_addr #服务器地址 kan deze waarde worden bepaald nadat een systeemaanroep is voltooid. server_name #服务器名称. server_port #请求到达服务器的端口号.
Zeven. Overeenkomst tussen Apache- en Nginx-regels De HerschrijfCond van Apache komt overeen met die van Nginx als De RewriteRule van Apache komt overeen met de herschrijving van Nginx Apache's [R] komt overeen met Nginx' redirect [P] in Apache komt overeen met de laatste in Nginx Apache's [R,L] komt overeen met Nginx' redirect Apache's [P,L] komt overeen met Nginx' laatste Apache's [PT,L] komt overeen met Nginx' laatste
Laat bijvoorbeeld een bepaalde domeinnaam toegang krijgen tot deze site en wend je altijd tot www.xx.com andere domeinnamen 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: als( $host ~* ^(.*)\.aaa\.com$ )
{ stel $allowHost '1';
} als( $host ~* ^localhost )
{ stel $allowHost '1';
} als( $host ~* ^192\.168\.1\.(. *?) $ )
{ stel $allowHost '1';
} als( $allowHost !~ '1' )
{ herschrijf ^/(.*)$ http://www.xx.comredirect ;
}
|