nginx: [emerge] неизвестная переменная «1» — при использовании фигурных скобок вокруг чисел переменных

#php #regex #nginx #url-rewriting

#php #регулярное выражение #nginx #url-переписывание

Вопрос:

В этом правиле

 location / {
    rewrite ^/(. )/(. )/(. )/(. )/(. )/(. )/(. )/(. )/(. )/(. )$ /index.php?param1=${1}amp;param2=${2}amp;param3=${3}amp;param4=${4}amp;param5=${5}amp;param6=${6}amp;param7=${7}amp;param8=${8}amp;param9=${9}amp;param10=${10} last;
}
  

я пытался передать ограничение в 9 параметров, поэтому я использовал фигурные скобки вокруг чисел переменных, но выдал мне это сообщение об ошибке

 nginx: [emerge] unknown "1" variable
  

Комментарии:

1. Возможно, у него нет определения для $ { 1 }. Это иначе назначается в другом месте, например $1 = "hey" ? Отдельно, похоже, в регулярном выражении есть буквенный пробел (. )<space>/index

2. @sln я мало что знаю о том, как nginx работает с перезаписью, но она работает так, как задумано, если я использовал $1 вместо ${1} , даже если я закончил регулярное выражение на $ , но добавлю его сейчас, чтобы избежать путаницы.

3. Любое выражение, содержащее фигурные скобки, должно быть заключено в кавычки.

4. @RichardSmith как в ${"1"} ?

5. @RichardSmith исправил опечатку и использовал кавычки, но выдал мне ту же ошибку, что и выше, я думаю, что числовые параметры имеют ограничение в 9

Ответ №1:

Если вы используете определенные символы ( } или ; ) в некоторых выражениях, вам нужно заключить все выражение в одинарные или двойные кавычки.

Однако этот вопрос связан с тем фактом, что только первые 9 записей доступны в виде числовых записей в Nginx.

Но вы можете использовать именованные захваты (даже если только для 10-го захвата).

Например:

 rewrite ^/(. )/(. )/(. )/(. )/(. )/(. )/(. )/(. )/(. )/(?<a>. )$
/index.php?param1=$1amp;param2=$2amp;param3=$3amp;param4=$4amp;param5=$5amp;param6=$6amp;param7=$7amp;param8=$8amp;param9=$9amp;param10=$a
last;
  

Именованный захват (?<a>. ) помещает захват в переменную $a .