Nginx: экранировать не буквенно-цифровые символы при перезаписи - PullRequest
0 голосов
/ 18 июня 2019

Я мигрирую из Apache в Nginx, и мне нужен способ конвертировать флаг переписывания Apache [B].

Флаг [B] экранирует все не алфавитно-цифровые символы перед применением преобразования перезаписи.Так, например,

x & y/z

будет преобразовано в

x%20%26%20y%2Fz

Есть ли способ сделать это в Nginx?Примеры, которые я нашел в Интернете, удаляют только эти символы, но мне нужен способ их преобразования.

Любая информация будет оценена.

Спасибо

1 Ответ

0 голосов
/ 16 июля 2019

Nginx не предоставляет функциональности по умолчанию для этого.Вместо этого вы можете использовать lua module для преобразования специальных символов

Шаги:

  1. Установка lua-пород и html-entity lib
apt-get install luarocks
luarocks install html-entities
html-entites lib преобразует каждый символ в html-сущность.Поэтому вы должны фильтровать символы, которые вам нужны.В этом примере я конвертирую все символы, которые не являются простыми английскими буквами.Создайте файл mymodule.lua
htmlEntities = require('htmlEntities')

local mymodule = {}

function mymodule.convert(string)
    return string:gsub("[^a-zA-Z]", function(c) return htmlEntities.encode(c) end)
end

return mymodule
В nginx.conf указать путь lua.Это загрузит все файлы lua в папку path2
http {
    lua_package_path "/path1/path2/?.lua;;";
    ...

, и для использования этого модуля вы можете использовать директивы * _by_lua.Например в локации

set_by_lua $escape "return require('mymodule').convert(ngx.var.name);" $name;
...