Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 11719|Odpowiedź: 1

[Web] Przykład ilustruje regułę przepisywania w Nginx

[Skopiuj link]
Opublikowano 05.12.2014 22:45:25 | | |
Jeden. Dopasowanie wyrażeń regularnych, gdzie:
* ~ jest dopasowaniem na wielka literę
* ~* to dopasowanie niezależne od przypadków wielkości liter
* !~ i !~* to niedopasowania na wielka litera i niewielka litera, odpowiednio
Dwa. plik i katalog się zgadzają, gdzie:
* -f i !-f są używane do określenia, czy plik istnieje
* -d i !-d są używane do określenia, czy katalog istnieje
* -e i !-e są używane do określenia, czy istnieje plik lub katalog
* -x i !-x są używane do określenia, czy plik jest wykonywalny, czy nie
3. Ostatnim parametrem instrukcji przepisywania jest znak flagowy, który jest oznaczony następująco:
1.last jest równoważne znacznikowi [L] w apache, co oznacza przepisanie.
2. Przerwa Po zakończeniu dopasowania tej reguły dopasowywanie zostaje zakończone, a kolejne reguły nie będą już dobierane.
3.redirect zwraca tymczasowe przekierowanie 302, a adres przeglądarki wyświetli adres URL po skoku.
4. Permanent return 301 permanent redirect, adres przeglądarki wyświetli adres URL po skoku.


Użyj last and break do implementacji przepisów URI, a pasek adresowy przeglądarki pozostaje bez zmian. I jest między nimi niewielka różnica – używanie komendy aliasa musi być oznaczone jako ostatnie; Używając proxy_pass dyrektyw, musisz użyć tagu przerwania. Po wykonaniu ostatniego tagu w tej regułie przepisywania będzie on na serwerze{......} tag ponownie inicjuje żądanie, natomiast break tag kończy mecz po zakończeniu gry regułowej.
Na przykład: jeśli przekierujemy adres URL taki jak /photo/123456 na /path/to/photo/12/1234/123456.png
przepisz "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;


Cztery. Reguła NginxRewrite


1. Przerwanie
Środowisko użytkowania: serwer, lokalizacja, jeśli;
Dyrektywa uzupełnia obecny zestaw reguł i nie obsługuje już dyrektywy przepisywania.


2. Jeśli dyrektywa
Środowisko użytkowania: serwer, lokalizacja
Ta instrukcja służy do sprawdzenia, czy spełniony jest warunek, a jeśli tak, do wykonania instrukcji wewnątrz nawiasów kręconych. Polecenie If nie obsługuje zagnieżdżania i nie obsługuje wielu warunków & oraz || Leczenie.


3. komenda powrotu
składnia: kod zwrotny ;
Środowisko użytkowania: serwer, lokalizacja, jeśli;
Ta instrukcja służy do zakończenia wykonania reguły i zwrócenia kodu statusu do klienta.
Przykład: Jeśli odwiedzony adres URL kończy się na ".sh" lub ".bash", zwracany jest kod statusu 403
lokalizacja ~ .*\. (sz|bam)?$
{
return 403;
}


4. Polecenie przepisywania
Składnia: flaga zastępcza rewriteregex
Środowisko użytkowania: serwer, lokalizacja, jeśli
Ta dyrektywa przekierowuje URI na podstawie wyrażenia lub modyfikuje ciąg znaków. Instrukcje są wykonywane w kolejności w pliku konfiguracyjnym. Należy zauważyć, że przepisywanie wyrażeń jest ważne tylko dla ścieżek względnych. Jeśli chcesz sparować nazwy hostów, powinieneś użyć instrukcji if, na przykład poniżej:
if( $host ~* www\.(. *) )
{
zestaw $host_without_www $1;
przepisz ^(.*)$ http://$host_without_www$1permanent;
}


5. Polecenie Set
Składnia: wartość setzmienna; Domyślnie: brak; Środowisko użytkowania: serwer, lokalizacja, jeśli;
Ta dyrektywa służy do definiowania zmiennej i przypisania jej wartości. Wartość zmiennej może być tekstem, zmienną lub sumą zmiennych tekstowych.
Przykład: set$varname "hello world";


6.Uninitialized_variable_warn instrukcje
Składnia: uninitialized_variable_warnon|off
Środowisko użytkowania: http, serwer, lokalizacja, jeśli
To polecenie służy do włączania i wyłączania komunikatu ostrzegawczego dla zmiennych niezainicjalizowanych, a domyślna wartość to Włączony.




Pięć. Przykład pisania reguł w Nginx Rewrite
1. Gdy dostęp do pliku i katalogu nie istnieją, przekieruj do określonego pliku php
if( !-e $request_filename )
{
przepisz ^/(.*)$ index.php ostatni;
}


2. Zamiana katalogów /123456/xxxx ====> /xxxx?id=123456
przepisać ^/(\d+)/(.+)/ /$2?id=$1 ostatni;


3. Jeśli klient korzysta z przeglądarki IE, przekierowuje do katalogu /ie
if( $http_user_agent ~ MSIE)
{
przepisanie ^(.*)$ /ie/$1 przerwa;
}


4. Wyłączenie dostępu do wielu katalogów
lokalizacja ~ ^/(cron|templates)/
{
zaprzeczać wszystkiemu;
przerwę;
}


5. Wyłącz dostęp do plików zaczynających się od /data
lokalizacja ~ ^/dane
{
zaprzeczać wszystkiemu;
}


6. Zakaz dostępu do plików o nazwach sufiksów .sh, .flv .mp3
lokalizacja ~ .*\. (sh|flv|mp3)$
{
return 403;
}


7. Ustaw czas pamięci podręcznej przeglądarki dla określonych typów plików
lokalizacja ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
wygasa 30d;
}
lokalizacja ~ .*\. (js|css)$
{
wygasa 1 godzinę;
}


8. Ustalić czas ważności dla favicon.ico i robots.txt;
Tutaj favicon.ico wynosi 99 dni, robots.txt 7 dni i log błędów 404 nie jest rejestrowany
lokalizacja ~(favicon.ico) {
log_not_found odejdź;
wygasa 99d;
przerwę;
}
lokalizacja ~(robots.txt) {
log_not_found odejdź;
wygasa 7d;
przerwę;
}


9. Ustaw czas ważności określonego dokumentu; To 600 sekund, a logi dostępu nie są rejestrowane
lokalizacja ^~ /html/scripts/loadhead_1.js {
access_log zmyli;
root /opt/lampp/htdocs/web;
wygasa 600;
przerwę;
}


10. Pliki anty-hotlink i ustaw czasy ważności
Return412 tutaj to niestandardowy kod statusu HTTP, domyślnie ustawiony na 403, co jest wygodne do znalezienia właściwego żądania hotlinku
"przepisanie ^/; "Pokazuje obraz anty-hotlinku
"access_log;" Nie rejestruje się żadnych logów dostępu, co zmniejsza stres
"Wygasa 3D" 3 dni pamięci podręcznej przeglądarki dla wszystkich plików


lokalizacja ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers brak zablokowanych *.xx.com*.xx.net localhost 208.97.167.194;
if ($invalid_referer) {
przepisanie ^/;
return 412;
przerwę;
}
access_log zmyli;
root /opt/lampp/htdocs/web;
wygasa 3d;
przerwę;
}


11. Zezwalać na stały dostęp IP do strony internetowej tylko z hasłem


root /opt/htdocs/www;
zezwalać 208.97.167.194;
zezwalać na 222.33.1.2;
zezwalać na 231.152.49.4;
zaprzeczać wszystkiemu;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Konwertowanie plików z katalogów wielopoziomowych w jeden plik, aby zwiększyć efekty SEO
/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 ostatni;


13. Przekierowywać, gdy pliki i katalogi nie istnieją:


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


14. Wskaż folder w katalogu głównym na katalog poziomu 2
Na przykład /shanghaijob/ wskazuje na /area/shanghai/
Jeśli zmienisz ostatni na stały, to pasek adresowy przeglądarki będzie miał okazję /location/shanghai/
przepisz ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Problem z powyższym przykładem polega na tym, że nie będzie się zgadzał podczas dostępu do /shanghai
przepisz ^/([0-9A-Z]+)job$ /area/$1/ na końcu;
przepisz ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
W ten sposób/Shanghai również jest dostępny, ale powiązane linki na stronie nie są dostępne,
Jeśli adres ./list_1.html to /area/shanghia/list_1.html, stanie się /list_1.html, co uczyni go niedostępnym.
Wtedy nie mogę dodać automatycznego skakania
(-d $request_filename) ma warunek, że musi być prawdziwym katalogiem, a moje przepisanie nie jest, więc nie ma to wpływu
if (-d $request_filename){
przepisać ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
To łatwe do zrobienia po poznaniu powodu, pozwól mi przeskoczyć ręcznie
przepisz ^/([0-9a-z]+)job$ /$1job/permanent;
przepisz ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. Skakanie po nazwach domen
serwer
{
słuchać 80;
server_name jump.linuxidc.com;
indeks index.html index.htm index.php;
root /opt/lampp/htdocs/www;
przepisanie ^/ http://www.xx.com/;
access_log zmyli;
}


16. Toczenie wielodomenowe
server_name www.xx.comwww.xx.com;
indeks index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ "linuxIDC\.net") {
przepisanie ^(.*) http://www.xx.com$1permanent;
}


6. Zmienne globalne nginx
arg_PARAMETER #这个变量包含GET请求中, jeśli istnieje zmienna PARAMETR.
args #这个变量等于请求行中 parametrów (GET request), np. foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Te dane są dokładne nawet jeśli połączenie zostanie przerwane.
Pole o długości content_length #请求头中的Content.
content_type #请求头中的Content-Typ pola.
cookie_COOKIE #cookie wartość zmiennej COOKIE
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
host #请求主机头字段, w przeciwnym razie nazwa serwera.
Nazwa hosta #Set do nazwy hosta themachine, zwróconej przez gethostname
http_HEADER
is_args #如果有args参数 ta zmienna jest równa "?", w przeciwnym razie równa się wartości zerowej.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, zazwyczaj GET lub POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Nazwa użytkownika zweryfikowana przez moduł Podstawowy.
request_completion #如果请求结束, ustaw na OK. Pusto, gdy żądanie nie jest ukończone lub jeśli nie jest ostatnie w łańcuchu żądań.
request_method #GET或POST
request_filename #当前请求的文件路径, generowany przez dyrektywy root lub alias oraz żądania URI.
request_uri #包含请求参数的原始URI nie zawiera nazwy hosta, np. "/foo/bar.php?arg=baz". nie można ich zmienić.
schemat #HTTP方法 (np. http, https).
server_protocol #请求使用的协议, zazwyczaj HTTP/1.0 lub HTTP/1.1.
server_addr #服务器地址 wartość tę można określić po zakończeniu wywołania systemowego.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Siedem. Korespondencja między regułami Apaczów i Nginx
RewriteCond Apache'a odpowiada Nginxowi jeśli
RewriteRule Apache'a odpowiada przepisaniu Nginx
[R] Apache'a odpowiada przekierowaniu Nginxa
[P] w języku Apache odpowiada ostatniemu w języku Nginx
[R,L] Apache'a odpowiada przekierowaniu Nginxa
[P,L] Apache'a odpowiada ostatniemu Nginxowi
[PT,L] Apache'a odpowiada ostatniemu Nginxowi


Na przykład pozwól na dostęp do tej strony przez określoną nazwę domeny i zawsze zwracaj się do www.xx.com innych domen
  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$ )
{
ustawiony $allowHost '1';
}
if( $host ~* ^localhost )
{
ustawiony $allowHost '1';
}
if( $host ~* ^192\.168\.1\.(. *?) $ )
{
ustawiony $allowHost '1';
}
if( $allowHost !~ '1' )
{
przepisz ^/(.*)$ http://www.xx.comredirect ;
}





Poprzedni:Sina Weibo skanuje kod i zapłaci 1 cent za otrzymanie premii na koniec roku do 2015 juanów
Następny:CMD5 łamie hasło administratora systemu Windows
Opublikowano 07.12.2014 17:25:05 |
Czytanie i odpisywanie to cnota
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com