0

我认为在 Nginx 中重写将是直截了当的。看起来不是。

我想从你们那里得到一些帮助。我之前的设置是 Apache2 + PHP。我的新设置是 Nginx + PHP-FPM。

我想从 Apache2 转换一个简单的虚拟主机。

目录结构为:

  • /api(这是根)

    • 版本 (1)

      --- api.php

      --- .htaccess

外汇。域名.tld/1/

.htaccess 文件如下所示:

RewriteEngine on
RewriteRule ^([a-z]+)/([a-z]+)/api.json$ api.php?app=$1&sapp=$2 [L,QSA]
RewriteRule ^([a-z]+)/api.json$ api.php?app=$1 [L,QSA]

我的新 Nginx 服务器文件如下所示:

server {
        listen 80;
        root /var/www/domain.tld/api;
        index index.php index.html;

        server_name domain.tld;

        location /1/ {
                rewrite ^/([a-z]+)/([a-z]+)/api\.json$ /api.php?app=$1&sapp=$2;
                rewrite ^/([a-z]+)/api\.json$ /api.php?app=$1;
        }

        location ~ \.php$ {
                include php5;
        }
}

但是当我尝试查看时它不起作用: domain.tld/1/view/api.json 或 domain.tld/1/view/extended/api.json

谁能解释并举一些例子来解决这个问题?

提前致谢。

4

1 回答 1

0

看看 NGiNX 如何处理location块,在这里:http ://nginx.org/en/docs/http/request_processing.html

正如您在您的情况下看到的,请求仅由您的location /1/块提供服务,因为这是两个匹配的唯一一个。问题是,NGiNX 每次请求只使用一个位置块,所以一旦进入该location /1/块,以后就不会再去另一个位置块了。这里的解决方案是将您的php5文件也包含在location /1/最后的块中。

location /1/ {
    rewrite ^/([a-z]+)/([a-z]+)/api\.json$ /api.php?app=$1&sapp=$2;
    rewrite ^/([a-z]+)/api\.json$ /api.php?app=$1;
    include php5;
}
于 2013-10-19T21:05:33.607 回答