Или без использования зла, если:
server {
server_name ~^(.*)\.example\.com$;
return 301 $scheme://www.newdomain.example/categories/$1$request_uri;
}
поскольку $ request_uri уже содержит строку запроса / аргументы, см. http://nginx.org/en/docs/http/ngx_http_core_module.html
и Я также хочу упомянуть пару $ is_args $ args, если вы не хотите использовать $ request_uri
location = /from {
return 301 /to$is_args$args;
}
Канал представляет подоболочку, в которой изменения переменных маскируются от родительского элемента; это похоже на циклы , а
с конвейерами, где изменения переменных внутри этого цикла не влияют на родительский . Изменение PID можно наблюдать с помощью модуля zsh / system
:
zmodload zsh/system
local testa=("a")
local testb=("b")
function test {
testb=(${(P)1})
echo "INSIDE testb=$testb $sysparams[pid]"
}
test "testa" | cat
echo "OUTSIDE testb=$testb $sysparams[pid]"
который должен отображать что-то вроде
% zsh foo.zsh
INSIDE testb=a 61488
OUTSIDE testb=b 61487
%
другой подоболочки, разных переменных.
Две стороны оператора трубы идут параллельно. Для этого обе стороны запускаются в отдельных процессах. (Это был единственный способ сделать это в исходной оболочке Unix, и это все еще единственный способ сделать это в современных оболочках.) Рассмотрим фрагмент вроде
testb=left | testb=right
echo $testb
. В zsh правая часть оператора конвейерной передачи выполняется в исходный процесс, а левая часть выполняется в подоболочке . Подоболочка обычно реализуется через отдельный процесс; даже если оболочка оптимизирует выполнение и не использует отдельный процесс, она гарантирует, что любые изменения состояния оболочки (переменные, перенаправление и т. д.) ограничиваются подоболочкой для согласованности. Таким образом, приведенный выше фрагмент печатает справа
.
(Другие оболочки также могут запускать правую часть канала в подоболочке. Среди обычных оболочек только zsh и ATT ksh запускают правую часть в исходном контексте. Левая часть всегда выполняется в подоболочке.)
Если вы хотите передавать данные по конвейеру без создания подоболочки, вы можете использовать замену процесса . Подстановка процесса создает канал в подоболочке и дает контроль над тем, подключен ли исходный контекст к входной или выходной стороне канала.
test "testa" > >(cat)
(Обратите внимание на пробел между >
и > (…)
: >> (cat)
будет анализироваться как подстановка процесса в режиме добавления, что передаст путь к каналу в качестве второго аргумента test
. Здесь мы хотим перенаправить вывод вызова функции в канал.)