Директива index должна позаботиться о большей части этого
server {
index index.php;
...
}
Если ваша установка требует использования try_files, то это должно работать для вас:
location / {
try_files $uri $uri/ $uri/index.php?$query_string =404;
}
Вы также можете захватить местоположение и использовать в качестве переменной:
location ~ ^/(?<anyfolder>) {
# Variable $anyfolder is now available
try_files $uri $uri/ /$anyfolder/index.php?$query_string =404;
}
Редактировать
Я вижу из вашего комментария, что вы хотите сначала попробовать файл index.php в папке темы и перейти к файлу в корневой папке, если его нет в папке темы.
Для этого вы можете попробовать что-то вроде ...
location / {
try_files $uri $uri/ $uri/index.php$is_args$args /index.php$is_args$args;
}
Примечание: $is_args$args
лучше, чем ?$query_string
, если есть вероятность, что аргументов может не быть.
Редактировать 2
Хорошо. Получил награду, но продолжал чувствовать, что я что-то упустил, и что ваш запрос фактически не был адресован. После прочтения и перечитывания, я думаю, что наконец понял ваш запрос.
Вы хотите проверить файл index.php в целевой папке. Если найдено, это будет выполнено. Если не найдено, продолжайте проверять родительские папки вверх по дереву каталогов, пока оно не будет найдено (это может быть корневая папка).
Ответ, который я дал в «РЕДАКТИРОВАНИИ» выше, просто переходит в корневую папку, но сначала вам нужно проверить промежуточные папки.
Не проверено, но вы можете попробовать рекурсивный шаблон регулярных выражений
# This will recursively swap the parent folder for "current"
# However will only work up to "/directChildOfRoot/grandChildOfRoot"
# So we will add another location block to continue to handle "direct child of root" and "root" folders
location ~ ^/(?<parent>.+)/(?<current>[^\/]+)/? {
try_files /$current /$current/ /$current/index.php$is_args$args /$parent;
}
# This handles "direct child of root" and "root" folders
location / {
try_files $uri $uri/ $uri/index.php$is_args$args /index.php$is_args$args;
}