Nginx Удалить завершающий вопросительный знак - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь создать правило перезаписи в Nginx, чтобы удалить вопросительный знак вопроса (?) из URL, но я не могу понять его правильно. Я сделал это для следующих слешей:

#redirect all trailing slash URL's to the respective non trailing slash
rewrite ^/(.*)/$ /$1 permanent;

поэтому я подумал, что то же самое сработает, если заменить косую черту знаком вопроса:

rewrite ^/(.*)?$ /$1 permanent;

но это не сработало, но мне пришло в голову, что вопросительный знак имеет какое-то значение в регулярном выражении, поэтому я попытался избежать его:

rewrite ^/(.*)\?$ /$1 permanent;

но это тоже не сработало, я попытался также удалить первую косую черту:

rewrite ^(.*)\?$ $1 permanent;

но это тоже был перебор, и да, я перезагружал сервер между тестами.

Вот что я пытаюсь сделать:

  • www.mysite.com? следует перенаправить на wwww.mysite.com
  • www.mysite.com/some/path? следует перенаправить на wwww.mysite.com/some/path
  • www.mysite.com?some=vars должно остаться без изменений.
  • www.mysite.com/some/path?some=vars должен остаться без изменений.

так что в основном удаляется вопросительный знак только при отсутствии строки запроса. Как я могу это сделать?

Я проверил другие ответы, но они, кажется, хотят полностью удалить строку запроса, я хочу удалить только в том случае, если есть только вопросительный знак и нет параметров.

1 Ответ

0 голосов
/ 07 января 2019

? отмечает начало строки запроса и не является частью нормализованного URI, используемого директивами rewrite или location. Поэтому вы не можете удалить его, используя оператор rewrite.

Вам нужно будет посмотреть исходный запрос, который находится в переменной $request_uri.

Например:

if ($request_uri ~ ^(.*)\?$) { return 301 $1; }

См. это предупреждение по использованию if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...