NGINX переписать без заявления IF - PullRequest
1 голос
/ 02 апреля 2012

ИНФОРМАЦИЯ

Я очищаю несколько URL-адресов в своем веб-приложении, переписывая их в NGINX.

Первое, что я делаю, - это обработка пейджинга [ex.http://domain.com/p/2],, а второй - для области профиля пользователя [напр.http://domain.com/username].

Я использую следующие переписки:

rewrite ^/p/(.*)$ /index.php?p=$1; # paging rewrite from /p/<page_number>
rewrite ^/(.*)$ /user.php?user=$1; # user page rewrite from /<username>

Проблема

Проблема, с которой я столкнулся, должна быть довольно легко заметна.Поскольку я использую / p / и / username, переписывание не различает два и в итоге думает, что / p / 2 следует передать как страницу пользователя.

Я знаю, что мне нужно выполнить проверкуof / p / и трактую его иначе, чем что-либо еще, чтобы переписать, но в моем прочтении я читал, что по возможности избегать операторов IF из-за возможных неожиданных результатов.

Вопрос

В этом случае можно было бы использовать оператор IF, если это так, как бы это выглядело, чтобы убедиться, что я проверяю на предмет правильности запроса, поступающего от пользователя.Если есть способ выполнить проверку без заявления IF, я хотел бы получить некоторое представление о том, как выполнить это.

Благодарю за любую помощь.

Приветствия,

Джаред

1 Ответ

3 голосов
/ 02 апреля 2012

Это то, для чего последний флаг.Просто добавьте его к первому перезаписи, и если оно совпадет, то второе перезапись не будет оцениваться:

rewrite ^/p/(.*) /index.php?p=$1 last;
rewrite ^/(.*) /user.php?user=$1;
...