#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
.