Re: Как задать условие в rewrite?
Maxim Dounin
mdounin на mdounin.ru
Вс Окт 14 03:34:17 UTC 2018
Hello!
On Sat, Oct 13, 2018 at 12:26:12PM -0400, serzh82 wrote:
> Здравствуйте! Я убрал слеш в конце урл с помощью:
> location ~ .+/$ {
> rewrite (.+)/$ $1 permanent;
> }
>
> Но дело в том, что этот код убирает слеш там, где это не нужно. Например,
> есть урл sait.ru/en/?page=2 из-за кода убирается слеш и получается урл
> sait.ru/en?page=2, что дает ошибку 404. Подскажите пожалуйста, как можно
> задать условие, чтобы код не убирал слеш, если после него стоит
> вопросительный знак ? Так возможно сделать?
Произвольные условия делаются с помощью директивы if. Скажем,
убрать слэш, только если в запросе нет аргументов, можно так:
if ($is_args = "") {
rewrite (.+)/$ $1 redirect;
}
Подробнее в документации тут:
http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#if
Но вообще я бы не рекомендовал заниматься подобными действиями,
особенно - в рамках сколько-нибудь сложных сайтов целиком. В
частности потому, что стандартное поведение nginx'а - это
добавление слэша, если каталог пытаются запрашиваеть без слэша в
конце, и таким образом очень легко можно плучить, например,
бесконечный цикл редиректов. Ну и других проблем, скорее всего,
вы тоже получите - как в рассматриваемом случае со "/en/?page=2".
Адреса со слэшом в конце и без него - это разные адреса. Они
могут быть взаимозаменяемы, если так написан код сайта, а могут и
не быть. Соответственно если хочется поменять одно на другое -
это следует делать локально, и строго там, где соответствующие
адреса точно взаимозаменямемы.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru