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 ;
}
|