Я борюсь с конфигом nginx. У меня есть блок server
где я хочу, чтобы все запросы переходили на index.php?tags=$uri
, если не существует $uri
(например, index.php?a=b
или /?a=b
).
Я бы ожидал:
try_files $uri index.php?tags=$uri;
но нет, это было бы слишком просто. Это не работает для /?a=b
, который, по-видимому, не найден, поэтому он указывает на index.php?tags=/
Может быть, если я явно включу index
, что разумно:
index index.php;
Нету. Нет кости. Точно такой же результат по всем направлениям.
Также ничего с $args
, $request_uri
или комбинациями. Тоже не это:
try_files $request_uri/index.php $request_uri index.php?tags=$request_uri; // now I'm just guessing
Apache почему-то знал, что я имел в виду всегда. Почему не nginx? Я хотел бы эти перенаправления (без redirect
или if
):
/ => /index.php
/index.php => /index.php
/index.php?a=b => /index.php?a=b
/?a=b => /index.php?a=b
/foo => /index.php?tags=foo (or /index.php?tags=/foo)
/foo/bar => /index.php?tags=foo/bar (or /index.php?tags=/foo/bar)
/foo?bar=yes => /index.php?tags=/foo%3Fbar%3Dyes
Я бы хотел, чтобы строка запроса кодировалась при перенаправлении, но не путь, но на самом деле это не так важно.
(Я также не понимаю практической разницы между $ uri и $ request_uri. Кажется, они делают то же самое половину времени. Но это на другой день.)
Большое спасибо.