Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11719|Vastaus: 1

[Web] Esimerkki havainnollistaa Nginxin uudelleenkirjoitussääntöä

[Kopioi linkki]
Julkaistu 5.12.2014 22.45.25 | | |
Yksi. Säännöllisten lausekeiden vastaavuus, jossa:
* ~ on kirjainkoon herkkä vastaavuus
* ~* on kirjainkoja kohtaamaton osuma
* !~ ja !~* ovat kirjainkoon sensitiivisiä ja kirjainkoon sensituntemattomia ristiriitaisuuksia
Kaksi. tiedosto ja hakemisto täsmäävät, missä:
* -f ja !-f käytetään selvittämään, onko tiedosto olemassa
* -d ja !-d käytetään selvittämään, onko hakemisto olemassa
* -e ja !-e käytetään määrittämään, onko tiedosto tai hakemisto olemassa
* -x ja !-x määritetään, onko tiedosto suoritettava vai ei
3. Uudelleenkirjoituskäskyn viimeinen parametri on lippumerkki, joka on merkitty seuraavasti:
1.viimeinen vastaa [L]-merkkiä apache-kielessä, mikä tarkoittaa uudelleenkirjoitusta.
2. Keskeytys Kun tämän säännön yhdistäminen on suoritettu, ottelu päättyy eikä seuraavia sääntöjä enää yhdistetä.
3.redirect palauttaa 302-väliaikaisen uudelleenohjauksen, ja selainosoite näyttää URL-osoitteen hypyn jälkeen.
4. pysyvä palautus 301 pysyvä uudelleenohjaus, selainosoite näyttää URL-osoitteen hypyn jälkeen.


Käytä viimeistä ja breakiä URI-uudelleenkirjoitusten toteuttamiseen, ja selaimen osoiterivi pysyy muuttumattomana. Ja näiden välillä on pieni ero, alias-komennon käyttö on merkitty viimeiseksi; Kun käytät proxy_pass direktiivejä, sinun täytyy käyttää break-tagia. Kun viimeinen tagi on suoritettu tässä uudelleenkirjoitussäännössä, se on palvelimella{......} tag käynnistää pyynnön uudelleen, kun taas break-tag lopettaa ottelun sääntömatchin päätyttyä.
Esimerkiksi: jos ohjaamme URL-osoitteen kuten /photo/123456 osoitteeseen /path/to/photo/12/1234/123456.png
kirjoita uudelleen "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;


Neljä. NginxRewrite -sääntö


1.Break command
Käyttöympäristö: palvelin, sijainti, jos;
Direktiivi täydentää nykyisen sääntökokoelman eikä enää käsittele uudelleenkirjoitusdirektiiviä.


2. Jos määrätietoinen
Käyttöympäristö: palvelin, sijainti
Tätä käskyä käytetään tarkistamaan, täyttyykö ehto, ja jos täyttyy, suoritetaan lause kiharan tukien sisällä. If-komento ei tue sisäkkäystä, eikä tue useita ehtoja && ja || Hoito.


3. Palautuskäsky
syntaksi: returncode ;
Käyttöympäristö: palvelin, sijainti, jos;
Tätä käskyä käytetään säännön suorittamisen lopettamiseen ja tilakoodin palauttamiseen asiakkaalle.
Esimerkki: Jos vierailtu URL päättyy ".sh" tai ".bash", palautetaan 403-tilakoodi
sijainti ~ .*\. (sh|bash)?$
{
paluu 403;
}


4. Kirjoita uudelleen komento
Syntaksi: rewriteregex korvaava lippu
Käyttöympäristö: palvelin, sijainti, jos
Tämä käsky ohjaa URI:tä lausekkeen perusteella tai muuttaa merkkijonoa. Käskyt suoritetaan konfiguraatiotiedoston järjestyksessä. Huomaa, että lausekkeiden uudelleenkirjoittaminen on pätevää vain suhteellisille poluille. Jos haluat parittaa isäntänimiä, käytä if-lauseita, esimerkiksi alla:
if( $host ~* www\.(. *) )
{
aseta $host_without_www $1;
kirjoita uudelleen ^(.*)$ http://$host_without_www$1permanent;
}


5. Aseta komento
Syntaksi: setvariable value; Oletus: ei yhtään; Käyttöympäristö: palvelin, sijainti, jos;
Tätä direktiiviä käytetään muuttujan määrittelyyn ja sille arvon määrittämiseen. Muuttujan arvo voi olla teksti, muuttuja tai tekstimuuttujien yhdiste.
Esimerkki: set$varname "hello world";


6.Uninitialized_variable_warn ohjeet
Syntaksi: uninitialized_variable_warnon|off
Käyttöympäristö: http, palvelin, sijainti, jos
Tätä komentoa käytetään varoitusviestin päälle- ja poiskytkemiseen alustamattomille muuttujille, ja oletusarvo on Päällä.




Viisi. Nginx Rewrite -sääntöjen kirjoitusesimerkki
1. Kun käytettyä tiedostoa ja hakemistoa ei ole olemassa, ohjaa tiettyyn php-tiedostoon
if( !-e $request_filename )
{
uudelleenkirjoita ^/(.*)$ index.php viimeisenä;
}


2. Hakemistojen vaihto /123456/xxxx ====> /xxxx?id=123456
uudelleenkirjoita ^/(\d+)/(.+)/ /$2?id=$1 viimeiseksi;


3. Jos asiakas käyttää IE-selainta, se ohjaa /ie-hakemistoon
if( $http_user_agent ~ MSIE)
{
uudelleenkirjoita ^(.*)$ /ie/$1 katkaisu;
}


4. Poista pääsy useisiin hakemistoihin
sijainti ~ ^/(cron|templates)/
{
kieltää kaikki;
tauko;
}


5. Estä pääsy tiedostoihin, jotka alkavat /data-kirjaimella
sijainti ~ ^/data
{
kieltää kaikki;
}


6. Kieltää pääsy tiedostoihin, joiden tiedostojen päätteet ovat .sh, .flv, .mp3
sijainti ~ .*\. (sh|flv|mp3)$
{
paluu 403;
}


7. Aseta selaimen välimuistiaika tietynlaisille tiedostotyypeille
sijainti ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
vanhenee 30d;
}
sijainti ~ .*\. (js|css)$
{
vanhentuu 1 tunti;
}


8. Aseta favicon.ico- ja robots.txt-käyttöajat;
Tässä favicon.ico on 99 päivää, robots.txt 7 päivää, ja 404-virheloki ei ole kirjattu
sijainti ~(favicon.ico) {
log_not_found pois;
päättyy 99d;
tauko;
}
sijainti ~(robots.txt) {
log_not_found pois;
vanhenee 7d;
tauko;
}


9. Aseta tietyn asiakirjan vanhenemisaika; Tämä on 600 sekuntia, eikä käyttölokit tallenna
sijainti ^~ /html/scripts/loadhead_1.js {
access_log pois;
root /opt/lampp/htdocs/web;
vanhenee 600;
tauko;
}


10. Anti-hotlink-tiedostot ja asetettu vanhenemisajat
Return412 tässä on räätälöity HTTP-tilakoodi, joka oletuksena on 403, mikä on kätevää oikean hotlink-pyynnön löytämiseksi
"kirjoita uudelleen ^/; "Näyttää kuvan anti-hotlinkistä
"access_log pois;" Pääsylokkeja ei tallenneta, mikä vähentää stressiä
"Vanhenee 3D" 3 päivää selaimen välimuistia kaikille tiedostoille


sijainti ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers ei estänyt *.xx.com*.xx.net localhost 208.97.167.194;
if ($invalid_referer) {
Kirjoita uudelleen ^/;
paluu 412;
tauko;
}
access_log pois;
root /opt/lampp/htdocs/web;
vanhentuu 3d;
tauko;
}


11. Salli vain kiinteä IP-osoite verkkosivustolle salasanalla


root /opt/htdocs/www;
lupa 208.97.167.194;
salli 222.33.1.2;
salli numero 231.152.49.4;
kieltää kaikki;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Muunna monitasokansioiden tiedostot yhdeksi tiedostoksi SEO-vaikutusten parantamiseksi
/job-123-456-789.html 指向/job/123/456/789.html


rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html viimeisenä;


13. Ohjaa uudelleen, kun tiedostoja ja hakemistoja ei ole olemassa:


if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}


14. Ohjaa juurikansion kansio tason 2 hakemistoon
Esimerkiksi /shanghaijob/ osoittaa /alueeseen/shanghai/
Jos vaihdat viimeiseksi pysyväksi, selaimen osoitepalkki on /location/shanghai/
uudelleenkirjoita ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Ongelma yllä olevassa esimerkissä on, että se ei täsmää, kun käytetään /shanghai
kirjoita uudelleen ^/([0-9a-z]+)job$ /area/$1/ viimeiseksi;
uudelleenkirjoita ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Tämä tapa/shanghai on myös saavutettavissa, mutta sivun suhteelliset linkit eivät ole saatavilla,
Jos ./list_1.html todellinen osoite on /area/shanghia/list_1.html muuttuu /list_1.html:ksi, jolloin se on saavuttamatonta.
Silloin en voi lisätä automaattista hyppyä
(-d $request_filename) ehto, että sen täytyy olla oikea hakemisto, ja uudelleenkirjoitukseni ei ole, joten sillä ei ole vaikutusta
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
Se on helppoa, kun tiedän syyn, annan tehdä manuaalisesti
uudelleenkirjoita ^/([0-9a-z]+)job$ /$1job/pysyvä;
uudelleenkirjoita ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. Verkkotunnuksen hyppääminen
Palvelin
{
kuuntele 80;
server_name jump.linuxidc.com;
indeksi index.html index.htm index.php;
root /opt/lampp/htdocs/www;
kirjoita uudelleen ^/ http://www.xx.com/;
access_log pois;
}


16. Monialueinen kääntäminen
server_name www.xx.comwww.xx.com;
indeksi index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ "linuxidc\.net") {
uudelleenkirjoita ^(.*) http://www.xx.com$1permanent;
}


6. nginx-globaalit muuttujat
arg_PARAMETER #这个变量包含GET请求中, jos on muuttuva PARAMETRI.
args #这个变量等于请求行中 (GET request) parametrit, esim. foo=123&bar=blahbla;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Nämä tiedot ovat tarkkoja, vaikka yhteys katkeaisikin.
content_length #请求头中的Content pituinen kenttä.
content_type #请求头中的Content-tyyppinen kenttä.
cookie_COOKIE #cookie COOKIE-muuttujan arvo
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
isäntä#请求主机头字段, muuten palvelimen nimi.
isäntänimi #Set koneen isäntänimeen, jonka palautti gethostname
http_HEADER
is_args #如果有args参数 tämä muuttuja on yhtä suuri kuin "?", muuten "", nollaarvo.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, yleensä GET tai POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Käyttäjätunnus on vahvistettu Basic-moduulilla.
request_completion #如果请求结束, aseta se OK:ksi. Tyhjä, kun pyyntö ei ole valmis tai jos pyyntö ei ole viimeinen pyyntöketjussa.
request_method #GET或POST
request_filename #当前请求的文件路径, jotka generoidaan juuri- tai alias-direktiiveistä ja URI-pyynnöistä.
request_uri #包含请求参数的原始URI se ei sisällä isäntänimeä, esim. "/foo/bar.php?arg=baz". ei voi muuttaa.
Scheme #HTTP方法 (esim. http, https).
server_protocol #请求使用的协议, yleensä HTTP/1.0 tai HTTP/1.1.
server_addr #服务器地址 tämä arvo voidaan määrittää järjestelmäkutsun jälkeen.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Seitsemän. Apache- ja Nginx-sääntöjen välinen kirjeenvaihto
Apachen RewriteCond vastaa Nginxin jos
Apachen RewriteRule vastaa Nginxin uudelleenkirjoitusta
Apachen [R] vastaa Nginxin uudelleenohjausta
[P] apassissa vastaa viimeistä Nginxissä
Apachen [R,L] vastaa Nginxin uudelleenohjausta
Apachen [P,L] vastaa Nginxin viimeistä
Apachen [PT,L] vastaa Nginxin viimeistä


Esimerkiksi salli tietyn verkkotunnuksen pääsy tälle sivustolle ja aina kääntyä www.xx.com muiden verkkotunnusten puoleen
  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$ )
{
setti $allowHost '1';
}
if( $host ~* ^localhost )
{
setti $allowHost '1';
}
if( $host ~* ^192\.168\.1\.(. *?) $ )
{
setti $allowHost '1';
}
if( $allowHost !~ '1' )
{
uudelleenkirjoita ^/(.*)$ http://www.xx.comredirect ;
}





Edellinen:Sina Weibo skannaa koodin maksaakseen 1 sentin saadaksesi vuoden lopun bonuksen vuoden 2015 yuaniin asti
Seuraava:CMD5 murtaa Windowsin järjestelmänvalvojan salasanan
Julkaistu 7.12.2014 17.25.05 |
Lukeminen ja takaisin kirjoittaminen on hyve
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com