|
|
Публикувано в 5.12.2014 г. 22:45:25 ч.
|
|
|

Едно. Съвпадение на регулярни изрази, където: * ~ е съвпадение, чувствително към регистра * ~* е съвпадение, което не е чувствителен към регистри * !~ и !~* са съответно чувствителни към регистри и не-регистрови несъответствия Две. Съвпадение на файл и директория, където: * -f и !-f се използват за определяне дали съществува файл * -d и !-d се използват за определяне дали съществува директория * -e и !-e се използват, за да се определи дали съществува файл или директория * -x и !-x се използват за определяне дали даден файл е изпълним или не 3. Последният параметър на инструкцията за пренаписване е знакът на флага, който се маркира с: 1.last е еквивалентно на марката [L] в apache, което означава пренаписване. 2. Пробив След като съвпадението на това правило бъде завършено, съвпадението ще бъде прекратено и следващите правила вече няма да се съвпадат. 3.redirect връща 302 временно пренасочване, а адресът на браузъра ще покаже URL адреса след скока. 4. Permanent return 301 Permanent redirect, адресът на браузъра ще покаже URL адреса след скока.
Използвайте last и break за реализиране на URI пренаписвания, а адресната лента на браузъра остава непроменена. И има малка разлика между двете, като командата за псевдоним трябва да бъде маркирана с последно; Когато използвате proxy_pass директиви, трябва да използвате таг break. След като последният таг бъде изпълнен в това правило за пренаписване, той ще бъде на сървъра {......} тагът инициира заявката отново, докато тагът break прекратява съвпадението след приключване на правилното съвпадение. Например: ако пренасочим URL като /photo/123456 към /path/to/photo/12/1234/123456.png пренапишете "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;
Четири. Правило за NginxRewrite
1. Прекъсване на командата Среда за използване: сървър, местоположение, ако; Директивата завършва текущия набор от правила и вече не обработва директивата за пренаписване.
2. Ако е указано Среда за използване: сървър, местоположение Тази инструкция се използва, за да провери дали е изпълнено дадено условие и ако да, за изпълнение на изявлението вътре в извитите скоби. Командата If не поддържа вложене и не поддържа множество състояния && и || Лечение.
3. Команда за връщане Синтаксис: returncode ; Среда за използване: сървър, местоположение, ако; Тази инструкция се използва за прекратяване на изпълнението на правилото и връщане на статус код на клиента. Пример: Ако посетеният URL приключи на ".sh" или ".bash", се връща статус код 403 Местоположение ~ .*\. (sh|bash)?$
{ връщане 403;
}
4. Команда за пренаписване Синтаксис: rewriteregex флаг за замяна Среда на използване: сървър, местоположение, ако Тази директива пренасочва URI въз основа на израза или модифицира низа. Инструкциите се изпълняват в реда в конфигурационния файл. Обърнете внимание, че пренаписването на изрази е валидно само за относителни пътища. Ако искате да сдвоите имена на хостове, трябва да използвате if оператори, например по-долу: if( $host ~* www\.(. *) )
{ сет $host_without_www $1; препишете ^(.*)$ http://$host_without_www$1permanent;
}
5. Задайте команда Синтаксис: setvariable стойност; По подразбиране: няма; Среда за използване: сървър, местоположение, ако; Тази директива се използва за дефиниране на променлива и присвояване на стойност на нея. Стойността на променливата може да бъде текстова, променлива или обединение на текстови променливи. Пример: set$varname "hello world";
6.Uninitialized_variable_warn инструкции Синтаксис: uninitialized_variable_warnon|off Среда за използване: http, сървър, местоположение, ако Тази команда се използва за включване и изключване на предупредителното съобщение за неинициализирани променливи, като по подразбиране стойността е Включено.
Пет. Пример за писане на правила при пренаписване на Nginx 1. Когато достъпеният файл и директория не съществуват, пренасочете към определен php файл if( !-e $request_filename )
{ пренапишете ^/(.*)$ index.php последен;
}
2. Смяна на директории /123456/xxxx ====> /xxxx?id=123456 препишете ^/(\d+)/(.+)/ /$2?id=$1 last;
3. Ако клиентът използва браузър IE, той пренасочва към директорията /ie if( $http_user_agent ~ MSIE)
{ препишете ^(.*)$ /ie/$1 break;
}
4. Деактивирайте достъпа до множество директории Местоположение ~ ^/(CRON|шаблони)/
{ да отрече всичко; прекъсване;
}
5. Деактивирайте достъпа до файлове, започващи с /data Местоположение ~ ^/данни
{ да отрече всичко;
}
6. Забраняване на достъпа до файлове с имена на суфикси .sh, .flv, .mp3 Местоположение ~ .*\. (sh|flv|mp3)$
{ връщане 403;
}
7. Задайте времето за кеширане на браузъра за определени типове файлове Местоположение ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ изтича 30 пенса;
} Местоположение ~ .*\. (js|css)$
{ изтича 1 час;
}
8. Задайте срокове за изтичане на favicon.ico и robots.txt; Тук favicon.ico е 99 дни, а robots.txt е 7 дни, и логът за грешки 404 не се регистрира местоположение ~(favicon.ico) { log_not_found си тръгна; изтича с 99 пенса; прекъсване;
} Местоположение ~(robots.txt) { log_not_found си тръгна; изтича 7 пенса; прекъсване;
}
9. Да се определи срокът на валидност на даден документ; Това са 600 секунди, а логовете за достъп не се записват location ^~ /html/scripts/loadhead_1.js { access_log отстрани; root /opt/lampp/htdocs/web; изтича 600; прекъсване;
}
10. Анти-хотлинк файлове и зададено време за изтичане Return412 тук е персонализиран HTTP статус код, който по подразбиране е 403, което е удобно за намиране на правилната заявка за hotlink "препишете ^/ ; "Показва изображение на анти-хотлинк "access_log махни;" Не се записват логове за достъп, което намалява стреса "Изтича 3D" 3 дни кеш на браузъра за всички файлове
местоположение ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers няма блокирано *.xx.com*.xx.net localhost 208.97.167.194; ако ($invalid_referer) { пренапишете ^/ ; връщане 412; прекъсване;
} access_log отстрани; root /opt/lampp/htdocs/web; изтича 3 пенса; прекъсване;
}
11. Позволявайте фиксиран IP достъп до сайта само с парола
root /opt/htdocs/www; разрешени 208.97.167.194; позволете 222.33.1.2; позволете 231.152.49.4; да отрече всичко; auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswd;
12Конвертирайте файлове в многостепенни директории в един файл за подобряване на SEO ефектите
/job-123-456-789.html 指向/job/123/456/789.html
преписване^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;
13. Пренасочвай, когато файлове и директории не съществуват:
ако (!-e $request_filename) { proxy_pass http://127.0.0.1;
}
14. Насочи папка в кореновата директория към директорията от ниво 2 Например, /shanghaijob/ сочи към /район/шанхай/ Ако смениш последната на постоянна, адресната лента на браузъра ще бъде /location/shanghai/ пренапишете ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; Проблемът с горния пример е, че няма да съвпадне при достъп до /shanghai препишете ^/([0-9a-z]+)job$ /area/$1/ last; пренапишете ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; Този път/шанхай също е достъпен, но относителните връзки на страницата не са налични, Ако ./list_1.html реалният адрес е /area/shanghia/list_1.html ще стане /list_1.html, което го прави недостъпен. Тогава не мога да добавя автоматично скачане (-d $request_filename) има условие, че трябва да е истинска директория, а моето преписване не е, така че няма ефект ако (-d $request_filename){ препишете ^/(.*)([^/])$ http://$host/$1$2/постоянно;
} Лесно е да се направи, след като разбереш причината, нека скоча ръчно препишете ^/([0-9a-z]+)job$ /$1job/постоянен; пренапишете ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
15. Прескачане на домейн Сървър
{ слушай 80; server_name jump.linuxidc.com; индекс index.html index.htm index.php; root /opt/lampp/htdocs/www; пренапишете ^/ http://www.xx.com/; access_log отстрани;
}
16. Многодомейн завъртане server_name www.xx.comwww.xx.com; индекс index.html index.htm index.php; root /opt/lampp/htdocs; if ($host ~ "linuxidc\.net") { пренапишете ^(.*) http://www.xx.com$1permanent;
}
6. Глобални променливи на Nginx arg_PARAMETER #这个变量包含GET请求中, ако има променлива ПАРАМЕТЪР. args #这个变量等于请求行中 (GET request) параметри, напр. foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Тези данни са точни дори ако връзката бъде прекъсната. content_length #请求头中的Content дължина поле. content_type #请求头中的Content-тип поле. cookie_COOKIE #cookie стойността на променливата COOKIE document_root #当前请求在root指令中指定的值. document_uri #与uri相同. Хост #请求主机头字段, иначе името на сървъра. Името на хоста #Set към името на хоста на TheMachine, както се връща от GetHostName http_HEADER is_args #如果有args参数, тази променлива е равна на "?", иначе равна на "", нулева стойност. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, обикновено GET или POST. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth Потребителското име е валидирано от Basic Module. request_completion #如果请求结束, настрой го на ОК. Празно, когато заявката не е завършена или ако заявката не е последната във веригата на заявките. request_method #GET或POST request_filename #当前请求的文件路径, генерирани от root или alias директиви и URI заявки. request_uri #包含请求参数的原始URI не съдържа хост-име, например "/foo/bar.php?arg=baz". не може да се модифицира. Scheme #HTTP方法 (например HTTP, HTTPS). server_protocol #请求使用的协议, обикновено HTTP/1.0 или HTTP/1.1. server_addr #服务器地址, тази стойност може да се определи след приключване на системно повикване. server_name #服务器名称. server_port #请求到达服务器的端口号.
Седем. Съответствие между правилата на Апачи и Нгинкс RewriteCond на Apache съответства на Nginx, ако RewriteRule на Apache съответства на пренаписването на Nginx [R] на Apache съответства на пренасочването на Nginx [P] на апачки съответства на последен в Нгинкс [R,L] на Apache съответства на пренасочването на Nginx Apache's [P,L] съответства на последния на Nginx Apache's [PT,L] съответства на последния на Nginx
Например, позволете на определено домейн име да достъпва този сайт и винаги се обръщайте към www.xx.com други домейн имена Апачи: 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$ )
{ зададена $allowHost '1';
} if( $host ~* ^localhost )
{ зададена $allowHost '1';
} ако( $host ~* ^192\.168\.1\.(. *?) $ )
{ зададена $allowHost '1';
} ако( $allowHost !~ '1' )
{ пренапишете ^/(.*)$ http://www.xx.comredirect ;
}
|
Предишен:Sina Weibo сканира кода, за да плати 1 цент, за да получи годишния бонус до юан за 2015Следващ:CMD5 разбива паролата на системния администратор на Windows
|