Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 11719|Ответ: 1

[Веб] Пример иллюстрирует правило перезаписи в Nginx

[Скопировать ссылку]
Опубликовано 05.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 and break для реализации URI-переписы, и адресная строка браузера останется неизменной. И между ними есть небольшая разница: использование команды псевдоним должно быть помечено последним; При использовании proxy_pass директив нужно использовать тег break. После того как последний тег будет выполнен в этом правиле перезаписи, он будет на сервере {......} Tag повторно инициирует запрос, а тег 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. Команда возврата
Синтаксис: код возврата ;
Среда использования: сервер, местоположение, если;
Эта инструкция используется для завершения выполнения правила и возврата статусного кода клиенту.
Пример: если посещаемый 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, server, location, if
Эта команда используется для включения и выключения предупреждающего сообщения для неинициализованных переменных, при этом по умолчанию значение — Включено.




Пять. Пример написания правил Nginx Rewrite
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
Местоположение ~ ^/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 секунд, и журналы доступа не записываются
расположение ^~ /html/scripts/loadhead_1.js {
access_log отключились;
root /opt/lampp/htdocs/web;
истекает 600 года;
перерыв;
}


10. Анти-хотлинк файлы и установка сроков действия
Return412 здесь — это пользовательский HTTP-код, который по умолчанию установлен на 403, что удобно для поиска правильного запроса на горячую ссылку
"переписать ^/; "Показывает изображение анти-хотлинка
«access_log отсюда»; Журналы доступа не ведутся, что снижает стресс
"Expires 3D" — 3 дня кэша браузера для всех файлов


расположение ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers не заблокирован *.xx.com*.xx.net localhost 208.97.167.194;
if ($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


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


13. Перенаправляйте, если файлы и каталоги отсутствуют:


if (!-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/permanent;
}
Это легко сделать после того, как узнаёшь причину, позволь мне прыгать вручную
переписать ^/([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 Имя пользователя подтверждено в Базовом Модуле.
request_completion #如果请求结束, поставь на ОК. Пустота, если запрос не завершён или если запрос не является последним в цепочке запросов.
request_method #GET或POST
request_filename #当前请求的文件路径 генерируется корневыми или псевдоним-директивами и 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
Apache [R] соответствует перенаправлению Nginx
[P] на апачском соответствует последнему в Нгинксе
Apache [R,L] соответствует перенаправлению Nginx
Апачи [P,L] соответствует последнему у Нгинкса
Apache [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';
}
if( $allowHost !~ '1' )
{
переписать ^/(.*)$ http://www.xx.comredirect ;
}





Предыдущий:Sina Weibo сканирует код, чтобы заплатить 1 цент и получить годовой бонус до юаней 2015 года
Следующий:CMD5 взломал пароль системного администратора Windows
Опубликовано 07.12.2014 17:25:05 |
Читать и отвечать — это добродетель
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com