Apache RewriteCond - 如何将它们转换为nginx重写规则?

时间:2014-06-01 12:17:33

标签: nginx url-rewriting

按照Simple REST server in php教程,我要为它设置重写规则。唯一的问题是我有nginx

RewriteRule ^$ index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

我试过这样的事情

location / { 
rewrite ^/api/$ /api/index.php last;
rewrite ^/api/(.*)$ /api/index.php last; 
}

但REST服务器返回

{
    "error": {
    "code": 404,
    "message": "Not Found"
 }

}

我想这与丢失的RuleCond有关,但我不知道如何转换它们。

1 个答案:

答案 0 :(得分:0)

您必须从具体规则中抽象出来并理解它们的含义。此Apache配置表示存在所需文件或文件夹 - 提供服务,否则提供index.php。在nginx中,我们使用try_files指令。

如果我理解正确,你需要在/api/文件夹中,所以这里有配置的想法:

index index.php;

location /api/ {
    try_files $uri $uri/ /api/index.php;
}

location ~ \.php$ {
    # PHP rules
}