Jedna. Regulární výrazová shoda, kde: * ~ je párování citlivé na velikost písmen * ~* je shoda bez ohledu na velikost a velikost * !~ a !~* jsou nesoulady citlivé na velká písmena a necitlivá na velikost Dva. shoda souboru a adresáře, kde: * -f a !-f se používají k určení, zda soubor existuje * -d a !-d se používají k určení, zda adresář existuje * -e a !-e se používají k určení, zda soubor nebo adresář existuje * -x a !-x se používají k určení, zda je soubor spustitelný či ne 3. Posledním parametrem instrukce přepisování je značka příznaku, která je označena: 1.last je ekvivalentní značce [L] v apache, což znamená přepsání. 2. Přerušení Po dokončení párování tohoto pravidla bude párování ukončeno a následující pravidla již nebudou párována. 3.redirect vrátí dočasné přesměrování 302 a adresa prohlížeče zobrazí URL adresu po skoku. 4. trvalé přesměrování 301 trvalé přesměrování, adresa prohlížeče zobrazí URL adresu po skoku.
Použijte last and break pro přepisování URI a adresní lišta prohlížeče zůstává beze změny. A mezi nimi je malý rozdíl, použití příkazu alias musí být označeno jako poslední; Při používání proxy_pass direktiv musíte použít tag break. Po provedení posledního tagu v tomto pravidle přepisu bude na serveru{......} Tag znovu iniciuje požadavek, zatímco break tag ukončí zápas po dokončení pravidlového zápasu. Například: pokud přesměrujeme URL jako /photo/123456 na /path/to/photo/12/1234/123456.png přepsat "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/cesta/k/foto/$1/$1$2/$1$2$3.png ;
Čtyři. Pravidlo NginxRewrite
1. příkaz break Prostředí použití: server, lokalita, jestli; Direktiva doplňuje současný soubor pravidel a již nezpracovává direktivu přepisování.
2. Pokud je direktiva Prostředí použití: server, lokalita Tato instrukce slouží ke kontrole, zda je splněna podmínka, a pokud ano, k vykonání příkazu uvnitř závorek. Příkaz If nepodporuje vnořování a nepodporuje více podmínek & a || Léčba.
3. Příkaz k návratu syntaxe: returncode ; Prostředí použití: server, lokalita, jestli; Tato instrukce se používá k ukončení vykonávání pravidla a vrácení stavového kódu klientovi. Příklad: Pokud navštívená URL končí na ".sh" nebo ".bash", vrátí se stavový kód 403 Poloha ~ .*\. (š|prásk)?$
{ return 403;
}
4. Příkaz přepisovat Syntaxe: příznak náhrady rewriteegexu Prostředí použití: server, lokalita, pokud Tato směrnice přesměruje URI na základě výrazu nebo upravuje řetězec. Instrukce se provádějí v pořadí v konfiguračním souboru. Všimněte si, že přepis výrazů platí pouze pro relativní cesty. Pokud chcete párovat hostitelská jména, měli byste použít if příkazy, například níže: if( $host ~* www\.(. *) )
{ Set $host_bez_www $1; přepsat ^(.*)$ http://$host_without_www$1permanent;
}
5. Příkaz Set Syntaxe: setvariable value; Výchozí: žádné; Prostředí použití: server, lokalita, jestli; Tato směrnice se používá k definování proměnné a přiřazení její hodnoty. Hodnota proměnné může být text, proměnná nebo sjednocení textových proměnných. Příklad: set$varname "hello world";
6.Uninitialized_variable_warn instrukce Syntaxe: uninitialized_variable_warnon|off Prostředí použití: http, server, lokalita, pokud Tento příkaz slouží k zapnutí a vypnutí varovné zprávy pro neinicializované proměnné a výchozí hodnota je Zapnuto.
Pět. Příklad psaní pravidel Nginx Rewrite 1. Když přístupný soubor a adresář neexistují, přesměrujte na určitý php soubor if( !-e $request_filename )
{ přepsat ^/(.*)$ index.php na konec;
}
2. Výměna adresářů /123456/xxxx ====> /xxxx?id=123456 přepsat ^/(\d+)/(.+)/ /$2?id=$1 poslední;
3. Pokud klient používá prohlížeč IE, přesměruje do adresáře /ie if( $http_user_agent ~ MSIE)
{ přepis ^(.*)$ /ie/$1 přestávka;
}
4. Zakázat přístup k více adresářům Location ~ ^/(cron|templates)/
{ popírat vše; pauza;
}
5. Zakázat přístup k souborům začínajícím na /data Poloha ~ ^/data
{ popírat vše;
}
6. Zákaz přístupu k souborům s příponami .sh, .flv .mp3 Poloha ~ .*\. (sh|flv|mp3)$
{ return 403;
}
7. Nastavte čas cache prohlížeče pro určité typy souborů Poloha ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ vyprší 30d;
} Poloha ~ .*\. (js|css)$
{ vyprší 1 hodina;
}
8. Nastavit doby expirace pro favicon.ico a robots.txt; Zde je favicon.ico 99 dní, robots.txt 7 dní a záznam chyb 404 není zaznamenán Poloha ~(favicon.ico) { log_not_found pryč; Vyprší 99d; pauza;
} Poloha ~(robots.txt) { log_not_found pryč; vyprší 7d; pauza;
}
9. Stanovit dobu platnosti určitého dokumentu; Je to 600 sekund a přístupové záznamy nejsou zaznamenávány Poloha ^~ /html/scripts/loadhead_1.js { access_log pryč; root /opt/lampp/htdocs/web; vyprší 600; pauza;
}
10. Anti-hotlink soubory a nastavení časů expirace Return412 zde je vlastní HTTP stavový kód, který je výchozí na 403, což je pohodlné pro nalezení správného požadavku na hotlink "přepsat ^/ ; "Zobrazuje obraz anti-hotlinku "access_log pryč;" Nejsou zaznamenávány žádné přístupové záznamy, což snižuje stres "Expiruje 3D" 3 dny cache prohlížeče pro všechny soubory
Poloha ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers žádný blokovaný *.xx.com*.xx.net localhost 208.97.167.194; if ($invalid_referer) { přepis ^/ ; return 412; pauza;
} access_log pryč; root /opt/lampp/htdocs/web; vyprší 3d; pauza;
}
11. Povolit pevný IP přístup pouze na web s heslem
root /opt/htdocs/www; povolit 208.97.167.194; povolit 222.33.1.2; povolit 231.152.49.4; popírat vše; auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswd;
12Převod souborů z víceúrovňových adresářů do jednoho souboru pro zvýšení SEO efektů
/job-123-456-789.html 指向/job/123/456/789.html
přepisovat ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html na konci;
13. Přesměrování, když soubory a adresáře neexistují:
if (!-e $request_filename) { proxy_pass http://127.0.0.1;
}
14. Nasměrujte složku v kořenovém adresáři na adresář úrovně 2 Například /shanghaijob/ ukazuje na /area/shanghai/ Pokud změníte last na permanent, pak adresní lišta prohlížeče bude /location/shanghai/ přepsat ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last; Problém s výše uvedeným příkladem je, že se neshoduje při přístupu k /shanghai přepsat ^/([0-9A-Z]+)job$ /area/$1/ na poslední; přepsat ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last; Tímto způsobem/Shanghai je také přístupný, ale související odkazy na stránce nejsou dostupné, Pokud je ./list_1.html skutečná adresa /area/shanghia/list_1.html se změní na /list_1.html, což ji znemožní. Pak nemůžu přidat automatické skákání (-d $request_filename) má podmínku, že to musí být skutečný adresář, a moje přepis není, takže nemá žádný efekt if (-d $request_filename){ přepsat ^/(.*)([^/])$ http://$host/$1$2/permanent;
} Je to snadné udělat, když znáte důvod, nechte mě skočit ručně přepsat ^/([0-9A-Z]+)job$ /$1job/permanent; přepsat ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;
15. Přeskakování doménových jmen Server
{ Listen 80; server_name jump.linuxidc.com; index index.html index.htm index.php; root /opt/lampp/htdocs/www; přepis ^/ http://www.xx.com/; access_log pryč;
}
16. Vícedoménové otáčení server_name www.xx.comwww.xx.com; index index.html index.htm index.php; root /opt/lampp/htdocs; if ($host ~ "linuxIDC\.net") { přepis ^(.*) http://www.xx.com$1permanent;
}
6. Nginx globální proměnné arg_PARAMETER #这个变量包含GET请求中, pokud existuje proměnná PARAMETR. args #这个变量等于请求行中 parametrů (GET request), např. foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Tato data jsou přesná i v případě, že je spojení přerušeno. content_length #请求头中的Content délky pole. content_type #请求头中的Content-typ pole. cookie_COOKIE #cookie hodnotu proměnné COOKIE document_root #当前请求在root指令中指定的值. document_uri #与uri相同. hostitelský #请求主机头字段, jinak název serveru. Hostitelské jméno #Set na název hostitele stroje, jak je vráceno pomocí gethostname http_HEADER is_args #如果有args参数 tato proměnná je rovna "?", jinak rovna "", nulová hodnota. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, obvykle GET nebo POST. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth Uživatelské jméno ověřeno modulem Basic. request_completion #如果请求结束, nastavte to na OK. Vyprázdnit, když požadavek není dokončen nebo pokud požadavek není poslední v řetězci požadavků. request_method #GET或POST request_filename #当前请求的文件路径, generované pomocí root nebo alias direktiv a požadavků na URI. request_uri #包含请求参数的原始URI neobsahuje název hostitele, např. "/foo/bar.php?arg=baz". nelze ji upravit. Schéma #HTTP方法 (např. HTTP, https). server_protocol #请求使用的协议, obvykle HTTP/1.0 nebo HTTP/1.1. server_addr #服务器地址 lze tuto hodnotu určit po dokončení systémového volání. server_name #服务器名称. server_port #请求到达服务器的端口号.
Sedm. Korespondence mezi pravidly Apache a Nginx Apacheův RewriteCond odpovídá Nginxovu pokud Apacheovo RewriteRule odpovídá přepisu Nginxu Apacheova [R] odpovídá přesměrování Nginxu [P] v apačštině odpovídá poslednímu v Nginx Apacheova [R,L] odpovídá Nginxovu přesměrování Apacheova [P,L] odpovídá Nginxově poslední Apacheova [PT,L] odpovídá Nginxově poslední
Například povolit přístup k tomuto webu určitému doménovému jménu a vždy se obrátit na www.xx.com další domény 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$ )
{ nastaveno $allowHost '1';
} if( $host ~* ^localhost )
{ nastaveno $allowHost '1';
} if( $host ~* ^192\.168\.1\.(. *?) $ )
{ nastaveno $allowHost '1';
} if( $allowHost !~ '1' )
{ přepsat ^/(.*)$ http://www.xx.comredirect ;
}
|