Nginx位置配置(子文件夹)

时间:2017-02-24 16:21:30

标签: php http nginx server slim

让我说我有一条道路:

/var/www/myside/

该路径包含两个文件夹...让我们说 /static/manage

我想配置nginx以访问:

/static上的

/文件夹(例如http://example.org/) 这个文件夹有一些.html文件。

/manage上的

/manage文件夹(例如http://example.org/manage)在这种情况下,此文件夹包含Slim的PHP框架代码 - 这意味着index.php文件位于{{ 1}}子文件夹(例如/var/www/mysite/manage/public/index.php)

我尝试了很多组合,例如

public

}

server { listen 80; server_name example.org; error_log /usr/local/etc/nginx/logs/mysite/error.log; access_log /usr/local/etc/nginx/logs/mysite/access.log; root /var/www/mysite; location /manage { root $uri/manage/public; try_files $uri /index.php$is_args$args; } location / { root $uri/static/; index index.html; } location ~ \.php { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; } 无论如何/都无法正常工作。难道我做错了什么?有人知道我应该改变什么吗?

马修。

1 个答案:

答案 0 :(得分:10)

要使用/var/www/mysite/manage/public之类的URI访问/manage之类的路径,您需要使用alias而不是root。有关详细信息,请参阅this document

我假设您需要从两个根运行PHP,在这种情况下,您将需要两个location ~ \.php块,请参阅下面的示例。如果您在/var/www/mysite/static内没有PHP,则可以删除未使用的location块。

例如:

server {
    listen 80;
    server_name  example.org;
    error_log /usr/local/etc/nginx/logs/mysite/error.log;
    access_log /usr/local/etc/nginx/logs/mysite/access.log;

    root /var/www/mysite/static;
    index index.html;

    location / {
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass 127.0.0.1:9000;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }

    location ^~ /manage {
        alias /var/www/mysite/manage/public;
        index index.php;

        if (!-e $request_filename) { rewrite ^ /manage/index.php last; }

        location ~ \.php$ {
            if (!-f $request_filename) { return 404; }
            fastcgi_pass 127.0.0.1:9000;

            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        }
    }
}

^~修饰符使前缀位置优先于同一级别的正则表达式位置。有关详细信息,请参阅this document

由于this long standing bugaliastry_files指令不在一起。

在使用if指令时要注意this caution