Вы хотите использовать try_files для проверки на наличие файлов вместо операторов if здесь (потому что If - это зло в Nginx).
To для одного каталога, это будетНапример:
location /xxx/{
try_files $uri $uri/ /xxx/index.php;
index index.php
}
Сначала попробуйте попробовать URI как файл.Если это не сработает, он будет пытаться в качестве каталога.Если ни одна из них не работает, по умолчанию будет index.php из / xxx /.Дополнительная строка указателя не позволяет показывать пустую страницу, если вы переходите непосредственно к what.com/xxx
Используя регулярное выражение, мы можем расширить это правило для работы с несколькими каталогами:
location ~* ^(/.*)/{
try_files $uri $uri/ $1/index.php?$uri&$args;
index index.php
}
Это должно получить полную структуру каталогов и направить ее к соответствующему индексу.
- abc.com / yyy / nonexistant.php ==> abc.com/yyy/index.php
- abc.com / yyy / zzz / nonexistant.php ==> abc.com/yyy/zzz/index.php
Если вы только хотите, чтобы второй пример перешел к yyy/index.php, используйте вместо этого этого регулярного выражения:
^(/.*?)/