Итак, если бы мы сделали следующее в блоке location файла nginx.conf:
try_files $uri $uri/ /index.php?$args;
Это вызывает файл index.php из корневой папки веб-сервера, если мы сделали что-то вроде https://www.example.com/john.
Как бы мы это записали, чтобы вызываемый им файл index.php находился в родительской папке?
Например: https://www.example.com/thisparent/john
Это будет использовать файл index.php из этого места: https://www.example.com/thisparent/
Это должно работать для любого местоположения веб-сервера, где симпатичный URL-адрес будет от родительского элемента запрошенного URL-адреса.
Для внутреннего перенаправления пути URI /parent/child
к /parent/index.php
, вам нужно вычислить путь к родительскому каталогу /parent
, поскольку nginx не предоставляет переменную для родительского каталога.
Например, вы можете использовать:
location ~ \.php$ {
# PHP FASTCGI configuration
}
# Matches are eager, so the first group matches everything
# up to the last '/'. We capture it into the $parent named variable.
location ~ ^(?<parent>.*)/ {
try_files $uri $parent/index.php$is_args$args;
}
Регулярное выражение в последнем месте соответствует всем возможным путям URI, поэтому оно должно быть последним в server
блок и будет иметь приоритет над всеми обычными префиксами (кроме ^~
и точное местоположение).
Менее агрессивное решение - использовать именованное местоположение в качестве запасного варианта. try_files
директива:
location / {
try_files $uri @parent_index;
}
location ~ \.php$ {
# PHP FASTCGI configuration
}
location @parent_index {
rewrite ^(?<parent>.*)/ $parent/index.php;
}