Nginx

Как да използвам пренаписване на URL

Как да използвам пренаписване на URL
Пренаписването на URL адреси е процес на промяна на URL адреса на заявката на нещо друго, както е дефинирано в уеб сървъра. Nginx използва модул ngx_http_rewrite_module, който използва главно директиви return, rewrite за пренаписване. Освен тези директиви, дефинирани в този модул, директивата map, дефинирана в ngx_http_map_module, може също да се използва за лесно пренаписване на URL адреси. Това ръководство има за цел да обясни около 2 основни директиви - връщане, пренаписване и техните знамена, как работят и приложенията им.

Предпоставки

Това ръководство е оптимизирано за Nginx 1.0.1 и по-горе и затова е силно препоръчително да актуализирате съществуващия екземпляр на Nginx до горепосочената или по-нова версия. Въпреки това, някои от командите, синтаксисите все още могат да работят за всяка версия преди гореспоменатата версия. Тъй като това ръководство е за пренаписване на URL адреси, което е малко усъвършенствана тема, то предполага, че аудиторията е запозната с процедурата за инсталиране на Nginx и по този начин не е обяснено тук.

Връщане

Return е основната директива, която извършва пренаписване на URL адреси и е лесна за разбиране. Той не използва регулярни изрази, но може да включва променливи за анализиране, заснети от пътя на блока за местоположение. Обикновено директивата return се използва за пренасочване на URL адреса на заявката на различно местоположение и затова тя често използва HTTP кодове като 301 за постоянно пренасочване и 302 за временно пренасочване. Следните кодови фрагменти демонстрират някои от случаите на използване на директивата за връщане.

Следният кодов фрагмент пренасочва URL адреса на заявката към Google.com. Може да се използва директно под кодовия блок на сървъра или под блоковия код на местоположението, но се уверете, че не пренасочвате към същия домейн, за да избегнете пренасочване

върнете 301 https: // google.com;

Следният кодов фрагмент пренасочва URL адреса на заявката към Nucuta.com заедно с пътя, например гореспоменатият пример не съдържа никакъв път, параметри и по този начин, без значение кой URL адрес е въведен в адресната лента, заявката се пренасочва към основния домейн на Google, докато в следващия пример, пътят, заедно с параметрите се пренасят без името на домейна. Като алтернатива могат да се използват $ is_args $ args, но тогава вместо $ request_uri трябва да се използва променлива $ uri, тъй като $ request_uri съдържа параметри и на URL адреса. Ако изискването е да се пренасочи към друга директория на същия домейн, тогава използвайте променлива $ host вместо името на домейна в директивата за връщане, например в следващия пример вместо nucuta.com, използвайте $ host.

връщане 301 https: // nucuta.com $ request_uri;

Следният кодов фрагмент пренасочва входящата заявка към директорията на пътя на същия домейн и схемата, което означава, че следният кодов фрагмент се използва в http: // Linux.com и ако посетител направи заявка към него, той се пренасочва към директорията на пътя и следователно следният кодов фрагмент е полезен при управление на голям брой уеб сайтове. Тук $ схемата определя протокола на URL адреса, като FTP, HTTP, HTTPS, а $ хостът определя домейна на текущия сървър с неговото разширение на домейн, като Google.com, Linux.Нет и т.н. Тъй като това не извършва пренасочване на протокол, като например от HTTP към HTTP, това трябва да се извърши ръчно, както във втория пример.

върнете 301 $ схема: // $ хост / път;
if ($ схема != "https")
връщане 301 https: // $ host $ request_uri;

Друг полезен случай на употреба на директивата за връщане е възможността да се включват променливи на регулярни изрази, но за това регулярният израз трябва да бъде посочен в блока за местоположение и той трябва да улови модел, след което заснетият шаблон може да се комбинира със съществуващия URL в директивата за връщане с цел пренасочване, например в следния пример, когато се прави заявка за достъп до текстов файл, той улавя името на текстовия файл в блока за местоположение, след това предава това име на директивата за връщане, след което директивата return го комбинира със съществуващата URL за пренасочване на заявката към друга директория.

местоположение ~ * ^ / ([^ /]+.txt) $
връщане 301 / хром / $ 1;

нова редакция

Пренаписване е директива, използвана за вътрешно пренаписване на URL адреси в уеб сървъра, без да се излага основният механизъм на клиентската страна. Според неговия синтаксис, той се използва с регулярни изрази. Основният синтаксис е както следва. Резервният заместител е за използване на регулярни изрази, заместващият заместител е за заместване на съответстващия URL адрес, докато флагът е за манипулиране на потока на изпълнението. В момента флаговете, използвани в директивата за пренаписване, са break, permanent, redirect и last.

пренаписване на подмяна на регулярни изрази [флаг];

Преди да пристъпите към регулярните изрази, заместванията, улавянето на образци и променливите, важно е да знаете за това как флаговете правят вътрешния двигател на Nginx да се държи. Има четири основни флага, използвани с директивата за пренаписване, както е обяснено по-рано, сред тях постоянни, флагове за пренасочване могат да бъдат сдвоени заедно, тъй като и двата изпълняват една и съща функционалност, което означава пренасочване.

Пренасочване

Флагът за пренасочване се използва, за да сигнализира на браузъра, че пренасочването е временно, което също е полезно при роботите на търсачките да разпознаят, че страницата е временно преместена и ще бъде възстановена на първоначалното си местоположение известно време по-късно. Когато страницата сигнализира, че е 302, търсачките не правят никакви промени в нейното индексиране и следователно посетителите все още виждат оригиналната страница в индекса на търсачката при търсене, което означава, че старата страница не е премахната и, освен това, всички качествени , като ранг на страница, сок от връзки не се предава на новата страница.

местоположение /

пренапишете ^ http: // 155.138.XXX.XXX / пренасочване на път;

Постоянен

Постоянният флаг се използва, за да сигнализира на браузъра, че пренасочването е постоянно, което също е полезно при роботите на търсачките да разпознаят, че страницата е окончателно отдалечена и НЯМА да бъде възстановена на първоначалното си местоположение известно време по-късно, като например при временно преместване. Когато страницата сигнализира, че е 301, търсачките правят някои промени в нейното индексиране и следователно посетителите виждат новата страница в индекса на търсачката вместо старата страница при търсене, което означава, че старата страница се заменя с новата страница, освен това всички качествените, като например ранг на страницата, сок от връзки се предават на новата страница.

местоположение /

пренапишете ^ http: // 155.138.XXX.XXX / път постоянен;

Редовен израз, улавяне на образци и променливи.

Nginx използва регуларен израз силно с директива за пренаписване и по този начин знанието за регуларните изрази е полезно в този сегмент.  Има множество видове регулярни изрази, но Nginx използва Perl съвместими регулярни изрази, известни също като PCRE. Наличието на инструмент за тестване на регулярни изрази е полезно, за да се уверите, че написаният шаблон наистина работи предварително, като го използвате в конфигурационния файл на Nginx. Това ръководство препоръчва https: // regex101.com / като инструмент, а всички следващи примери се тестват старателно с гореспоменатия инструмент.

Редовни изрази

пренапишете ^ / fr / (.*) $ http: // nucuta.com / $ 1 постоянен;

Типичен модел на директивата за пренаписване е както по-горе, тя съдържа директивата за пренаписване в началото, след това с интервал „шаблонът“ в регулярен израз, след това с интервал „замяната“, след което накрая „флагът“. Директивата за пренаписване може да бъде поставена навсякъде в сървърните скоби, но се препоръчва да я запазите, след като посочите директиви за слушане, име на сървър, корен и индекс. Когато посетител направи заявка към сървъра, заедно със заявката се изпраща и URL адрес, след което ако URL адресът е съчетан с шаблона на регулярния израз, посочен в директивата за пренаписване, той се пренаписва въз основа на замяната, след което потокът на изпълнение се манипулира въз основа на знамето.

Шаблонът на регулярния израз използва скоби, за да посочи групата, чийто подниз се извлича от URL адреса при съвпадение на шаблона на регулярния израз с URL адреса на заявката, след което този поднизов изваден от URL адреса се присвоява на променливата в „Заместване“ на директивата за пренаписване. Ако има множество съвпадащи групи, поднизовете на всяка съвпадаща група се присвояват на променливите в „заместване“ в числов ред, което означава, че поднизовете на първата съвпадаща група се присвояват на първата променлива ($ 1), подниза на втората съвпадаща група се присвоява на втора променлива ($ 2) и т.н.

От 4 знамена, 2 знамена вече бяха обяснени в това ръководство, останалите са последни и са счупени. Преди да разберете как работят останалите флагове, важно е да разберете как се държи двигателят на Nginx с директиви за пренаписване. Когато URL адрес се изпраща заедно със заявка, двигателят на Nginx се опитва да го съпостави с блок за местоположение. Независимо дали е съвпаднат или не, ако се натъкне на директива като пренаписване, return се изпълнява последователно. Ако изпратеният URL адрес съвпада с модела на директива за пренаписване, двигателят на Nginx изпълнява целия конфигурационен файл, независимо къде директивата за пренаписване е посочена като цикъл, докато новозаписаният URL адрес съвпадне с един от блоковете за местоположение.

Следният URL се използва като демонстрация, за да обясни как двата флага правят поведението на изпълнението на Nginx engine с директива за пренаписване. Следващата екранна снимка изобразява файловата структура на уеб сървъра.

http: // 155.138.XXX.XXX / браузър / пример.txt (URL адресът, изпратен като заявка)

Когато не се използва флаг

Когато не се използва флаг, и двете директиви за пренаписване се изпълняват последователно; следователно първият URL в следващия списък се превръща в 2nd, след това 2nd URL се превръща в последния URL, така че когато пробата.txt файл в папката на браузъра, уеб сървърът всъщност обслужва пробата.txt файл в основната папка. Тъй като пренаписването на URL адреси е напълно абстрахирано далеч от браузъра, той не вижда никаква разлика в обслужването в сравнение с директивата за връщане, която посочва в браузъра дали заявката е била пренасочена или не с HTTP номер.

  1. http: // 155.138.XXX.XXX / браузър / пример.текст
  2. http: // 155.138.XXX.XXX / хром / проба.текст
  3. http: // 155.138.XXX.XXX / проба.текст
местоположение /

пренапишете ^ / браузър / (.*) $ / хром / $ 1;
пренапишете ^ / хром / (.*) $ / $ 1;
местоположение / хром
try_files $ uri $ uri / = 404;

Когато или Break, или Last Flag е посочено извън блока за местоположение

Когато или break или последният флаг е посочен извън блока за местоположение, директивите за пренаписване след съответстващата директива за пренаписване изобщо не се анализират, например в следващия пример URL адресът на заявката се пренаписва на 2nd един в следващия списък, независимо от използвания флаг, и това е всичко.

  1. http: // 155.138.XXX.XXX / браузър / пример.текст
  2. http: // 155.138.XXX.XXX / хром / проба.текст
местоположение /

пренапишете ^ / браузър / (.*) $ / chrome / $ 1 последно; #break
пренапишете ^ / хром / (.*) $ / $ 1 последно; #break
местоположение / хром
try_files $ uri $ uri / = 404;

Когато последният флаг се използва вътре в блок за местоположение

Когато последният флаг се използва вътре в блок за местоположение, той спира да анализира повече директиви за пренаписване вътре в този конкретен блок за местоположение и се потапя в следващия блок за пренаписване на местоположение, ако пренаписаният URL адрес съвпада с пътя на този блок за местоположение, след което изпълнява последваща директива за пренаписване вътре в нея.

  1. http: // 155.138.XXX.XXX / браузър / пример.текст
  2. http: // 155.138.XXX.XXX / хром / проба.текст
  3. http: // 155.138.XXX.XXX / проба.текст
местоположение /
пренапишете ^ / браузър / (.*) $ / хром / $ 1 последно;

местоположение / хром
пренапишете ^ / хром / (.*) $ / $ 1 последно;
try_files $ uri $ uri / = 404;

Когато флагът за прекъсване се използва вътре в блок за местоположение

Break flag, от друга страна, когато е вътре в блок за местоположение, спрете да анализирате вече директиви за пренаписване, независимо къде се намират, когато една директива за пренаписване съвпада с URL адреса на заявката и обслужва съдържанието на потребителя.

местоположение /
пренапишете ^ / браузър / (.*) $ / chrome / $ 1 почивка;

местоположение / хром
пренапишете ^ / хром / (.*) $ / $ 1 почивка;
try_files $ uri $ uri / = 404;

Заключение

Пренаписването на URL адреси е процес на пренаписване на URL адреси в уеб сървър. Nginx предоставя множество директиви като return, rewrite, map директиви, за да стане възможно. Това ръководство демонстрира какво са директиви за връщане и пренаписване и как се използват за лесно пренаписване на URL адреси. Както е демонстрирано в примерите, директивата return е подходяща за сигнализиране на браузъра и търсачката обхожда местонахождението на страницата, докато директивата за пренаписване е полезна за абстрахиране на процеса на пренаписване на URL адреси, без да позволява на браузъра да знае какво се случва зад сцената. Това е доста полезно при обслужване на съдържание чрез CDN, кеширан сървър или от различно местоположение в мрежата. Потребителите никога не знаят откъде идва ресурсът, тъй като браузърът показва само URL адреса, даден им.

Урок за битка за Уеснот
Битката за Уеснот е една от най-популярните стратегически игри с отворен код, които можете да играете по това време. Тази игра не само се разработва о...
0 А.д. Урок
От многото стратегически игри, 0 A.д. успява да се открои като изчерпателно заглавие и много дълбока, тактическа игра, въпреки че е с отворен код. Раз...
Урок за Unity3D
Въведение в Unity 3D Unity 3D е мощен двигател за разработка на игри. Това е кръстосана платформа, която ви позволява да създавате игри за мобилни уст...