Один. Совпадение регулярного выражения, где: * ~ — сопоставление с чувствительностью к регистру * ~* — совпадение, не чувствительное к регистру * !~ и !~* — это соответственно несоответствия с регистром и нечувствительным к регистру Два. Совпадение файла и каталога, где: * -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 ;
}
|