使用php Slim框架并具有以下结构:
/root
/dir_parent_1/
/dir_child_1
/index.php
/dir_parent_2
/index.php
/root/dir_parent_1/dir_child_1/index.php
拥有users
路线,并且
/root/dir_parent_2/index.php
拥有clients
路线。
我如何编写Nginx位置以匹配两种可能的组合?
我试试:
location ~ ^/root/(\w+)
{
try_files $uri /gestionhospitales/api/$1/index.php?$query_string;
}
location ~ ^/root/(\w+)/(\w+)
{
try_files $uri /gestionhospitales/api/$1/$2/index.php?$query_string;
}
但它们是相互排斥的。转到“/ root / dir_parent_1 / dir_child_1 / users”匹配第一个规则(因为它是第一个。如果我颠倒顺序,第二个匹配),
此外,我开始为两种情况编写规则,但我不知道如何完成它:
location ~ ^/root/(\w+)?/(\w*)
{
try_files $uri /gestionhospitales/api/$1/$2/index.php?$query_string;
# tried with if, rewrite, etc. But i'm not nginx expert.
}
提前致谢。
答案 0 :(得分:1)
您必须设置的唯一途径是将所有内容转发到公共目录中的index.php文件。
root /path/www.mysite.com/public_html;
try_files $uri /index.php;
此文件应包含用于boostrap Slim Framework的php代码。然后所有“路由”将由PHP和Slim根据您在index.php中的代码处理,而不是由nginx处理。
$app->get('/users', function () {
echo "This is the user route!";
});
$app->get('/clients', function () {
echo "This is the client route!";
});
您可以在官方文档中看到完整的示例here。