Nginx

Как использовать перезапись URL

Как использовать перезапись URL
Перезапись URL-адреса - это процесс изменения URL-адреса запроса на что-то другое, как определено на веб-сервере. Nginx использует модуль ngx_http_rewrite_module, который в основном использует директивы return, rewrite для перезаписи. Помимо этих директив, определенных в этом модуле, директива map, определенная в ngx_http_map_module, также может использоваться для простой перезаписи URL-адресов. Это руководство предназначено для объяснения двух основных директив - return, rewrite и их флагов, как они работают и их приложений.

Предпосылки

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

Возвращаться

Return - это основная директива, которая выполняет перезапись URL и проста для понимания. Он не использует регулярные выражения, но может включать переменные для анализа, захваченные из пути блока местоположения. Обычно директива return используется для перенаправления URL-адреса запроса в другое место, и поэтому часто используются HTTP-коды, такие как 301 для постоянного перенаправления и 302 для временного перенаправления. Следующие ниже фрагменты кода демонстрируют некоторые варианты использования директивы return.

Следующий фрагмент кода перенаправляет URL-адрес запроса в Google.ком. Его можно использовать либо непосредственно под блоком кода сервера, либо под блоком кода местоположения, но убедитесь, что не перенаправляете в тот же домен, чтобы избежать цикла перенаправления

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

Следующий фрагмент кода перенаправляет URL-адрес запроса на Nucuta.com вместе с путем, например, в вышеупомянутом примере нет пути, параметров, и, таким образом, независимо от того, какой URL-адрес вводится в адресной строке, запрос перенаправляется в корневой домен Google, тогда как в следующем примере путь вместе с параметрами переносится без имени домена. В качестве альтернативы можно использовать $ is_args $ args, но тогда вместо $ request_uri следует использовать переменную $ uri, поскольку $ request_uri также содержит параметры URL-адреса. Если требуется перенаправить в другой каталог того же домена, используйте переменную $ host вместо имени домена в директиве return, например, в следующем примере вместо nucuta.com, используйте $ host.

возврат 301 https: // nucuta.com $ request_uri;

Следующий фрагмент кода перенаправляет входящий запрос в каталог пути того же домена и схему, что означает, что следующий фрагмент кода используется в http: // Linux.com, и если посетитель сделал к нему запрос, он перенаправляется в каталог пути, и поэтому следующий фрагмент кода полезен при управлении большим количеством веб-сайтов. Здесь $ scheme определяет протокол URL-адреса, такой как FTP, HTTP, HTTPS, а $ host определяет домен текущего сервера с его расширением домена, например Google.com, Linux.Сеть и т. Д. Поскольку при этом не выполняется перенаправление протокола, например с HTTP на HTTP, это нужно делать вручную, как во втором примере.

return 301 $ scheme: // $ host / path;
если ($ схема != "https")
return 301 https: // $ host $ request_uri;

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

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

Переписать

Rewrite - это директива, используемая для перезаписи URL-адресов внутри веб-сервера без раскрытия базового механизма на стороне клиента. Согласно синтаксису, он используется с регулярными выражениями. Базовый синтаксис выглядит следующим образом. Заполнитель регулярного выражения предназначен для использования регулярных выражений, заполнитель замены предназначен для замены совпадающего URL-адреса, тогда как флаг предназначен для управления потоком выполнения. На данный момент в директиве rewrite используются следующие флаги: break, постоянный, перенаправленный и последний.

перезаписать замену регулярного выражения [флаг];

Прежде чем переходить к регулярным выражениям, заменам, захвату шаблонов и переменной, важно знать, как флаги заставляют вести себя внутренний движок Nginx. Как объяснялось ранее, с директивой rewrite используются четыре основных флага, среди которых постоянные, флаги перенаправления могут быть объединены вместе, поскольку оба выполняют одинаковые функции, что означает перенаправление.

Перенаправить

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

место расположения /

перезаписать ^ http: // 155.138.XXX.XXX / перенаправление пути;

Постоянный

Постоянный флаг используется, чтобы сообщить браузеру, что перенаправление является постоянным, что также помогает сканерам поисковых систем распознавать, что страница окончательно перемещена и НЕ будет восстановлена ​​в исходном местоположении через некоторое время, как при временном перемещении. Когда страница сигнализирует, что это 301, поисковые системы вносят некоторые изменения в ее индексирование, и поэтому посетители видят новую страницу в индексе поисковой системы вместо старой при поиске, то есть старая страница заменяется новой страницей, кроме того, все квалифицированные, такие как рейтинг страницы, ссылочный вес, передаются на новую страницу.

место расположения /

перезаписать ^ http: // 155.138.XXX.XXX / путь постоянный;

Регулярное выражение, захват шаблонов и переменные.

Nginx активно использует регулярные выражения с директивой rewrite, поэтому знание регулярных выражений пригодится в этом сегменте.  Существует несколько типов регулярных выражений, но Nginx использует Perl-совместимые регулярные выражения, также известные как PCRE. Наличие инструмента проверки регулярных выражений полезно, чтобы заранее убедиться, что написанный шаблон действительно работает, используя его в файле конфигурации Nginx. В этом руководстве рекомендуется https: // regex101.com / в качестве инструмента, и все следующие примеры тщательно протестированы с помощью вышеупомянутого инструмента.

Регулярные выражения

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

Типичный шаблон директивы перезаписи выглядит так, как указано выше, он содержит директиву перезаписи в начале, затем с пробелом «шаблон» в регулярном выражении, затем с пробелом «замену», затем, наконец, «флаг». Директиву rewrite можно разместить в любом месте в скобках сервера, но рекомендуется сохранить ее после указания директив listen, server_name, root и index. Когда посетитель делает запрос к серверу, URL-адрес отправляется вместе с запросом, затем, если URL-адрес соответствует шаблону регулярного выражения, указанному в директиве rewrite, он перезаписывается на основе замены, тогда поток выполнения обрабатывается на основе на флаге.

В шаблоне регулярного выражения скобки используются для обозначения группы, подстрока которой извлекается из URL-адреса после сопоставления шаблона регулярного выражения с URL-адресом запроса, затем эта подстрока, извлеченная из URL-адреса, назначается переменной в «Замена» директивы rewrite. Если имеется несколько сопоставленных групп, подстрока каждой сопоставленной группы присваивается переменным в «замене» в числовом порядке, что означает, что подстрока первой сопоставленной группы присваивается первой переменной ($ 1), подстроке вторая согласованная группа назначается второй переменной ($ 2) и т. д.

Из 4 флагов 2 флага уже были объяснены в этом руководстве, остальные являются последними и не работают. Прежде чем понять, как работают остальные флаги, важно понять, как движок Nginx ведет себя с директивами перезаписи. Когда URL-адрес отправляется вместе с запросом, движок Nginx пытается сопоставить его с блоком местоположения. Независимо от того, совпадает он или нет, если встречается такая директива, как rewrite, return, она выполняется последовательно. Если отправленный URL-адрес совпадает с шаблоном директивы перезаписи, движок Nginx выполняет весь файл конфигурации, независимо от того, где директива перезаписи указана в виде цикла, до тех пор, пока вновь перезаписанный URL-адрес не совпадет с одним из блоков местоположения.

Следующий URL-адрес используется в качестве демонстрации, чтобы объяснить, как оба флага заставляют поток выполнения движка Nginx вести себя с директивой rewrite. На следующем снимке экрана изображена файловая структура веб-сервера.

http: // 155.138.XXX.XXX / браузер / образец.txt (URL-адрес, отправленный в виде запроса)

Когда не используется флаг

Если флаг не используется, обе директивы перезаписи выполняются последовательно; следовательно, первый URL в следующем списке превращается в 2nd, затем 2nd URL-адрес превращается в последний URL-адрес Итак, когда образец.txt в папке браузера запрашивается, веб-сервер фактически обслуживает образец.txt в корневой папке. Поскольку перезапись URL-адреса полностью абстрагируется от браузера, он не видит никакой разницы в обслуживании по сравнению с директивой return, которая сообщает браузеру, был ли запрос перенаправлен или нет с номером HTTP.

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

переписать ^ / браузер / (.*) $ / chrome / $ 1;
переписать ^ / хром / (.*) $ / $ 1;
location / chrome
try_files $ uri $ uri / = 404;

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

Когда за пределами блока местоположения указывается либо флаг break, либо последний, директивы перезаписи после соответствующей директивы перезаписи вообще не анализируются, например, в следующем примере URL-адрес запроса перезаписывается на 2nd один в следующем списке независимо от используемого флага, и все.

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

переписать ^ / браузер / (.*) $ / chrome / $ 1 last; #break
переписать ^ / хром / (.*) $ / $ 1 last; #break
location / chrome
try_files $ uri $ uri / = 404;

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

Когда последний флаг используется внутри блока местоположения, он больше не анализирует директивы перезаписи внутри этого конкретного блока местоположения и погружается в следующий блок перезаписи местоположения, если перезаписанный URL-адрес совпадает с путем этого блока местоположения, затем он выполняет последующая директива перезаписи внутри него.

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

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

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

С другой стороны, флаг прерывания, когда он находится внутри блока местоположения, больше не анализирует директивы перезаписи, независимо от того, где они расположены, когда одна директива перезаписи сопоставляется с URL-адресом запроса и передает контент пользователю.

место расположения /
переписать ^ / браузер / (.*) $ / chrome / $ 1 перерыв;

location / chrome
переписать ^ / хром / (.*) Перерыв $ / $ 1;
try_files $ uri $ uri / = 404;

Заключение

Перезапись URL-адресов - это процесс перезаписи URL-адресов на веб-сервере. Nginx предоставляет несколько директив, таких как return, rewrite, map, чтобы сделать это возможным. В этом руководстве показано, что такое директивы return и rewrite и как они используются для простой перезаписи URL-адресов. Как показано в примерах, директива return подходит для сигнализации браузеру, а поисковая система сканирует местонахождение страницы, тогда как директива rewrite полезна для абстрагирования процесса перезаписи URL, не позволяя браузеру знать, что происходит за сценой. Это очень полезно при обслуживании контента через CDN, кэшированный сервер или из другого места в сети. Пользователи никогда не знают, откуда берется ресурс, поскольку браузер показывает только предоставленный им URL.

Переназначьте кнопки мыши по-разному для разных программ с помощью X-Mouse Button Control
Может быть, вам нужен инструмент, который мог бы изменять управление вашей мышью с каждым приложением, которое вы используете. В этом случае вы можете...
Обзор беспроводной мыши Microsoft Sculpt Touch
Я недавно прочитал о Microsoft Sculpt Touch беспроводная мышь и решил ее купить. Побывав некоторое время, я решил поделиться своим опытом с ним. Эта б...
Экранный трекпад и указатель мыши AppyMouse для планшетов с Windows
Пользователи планшетов часто пропускают указатель мыши, особенно когда они привыкли пользоваться ноутбуками. Смартфоны и планшеты с сенсорным экраном ...