2017-02-24 200 views
4

可以說,我已經像一個路徑:Nginx的位置配置(子文件夾)

/var/www/myside/ 
該路徑包含兩個文件夾

...讓我們說 /static/manage

我想nginx的配置有一個訪問:

/static文件夾/(如:http://example.org/) 這個文件夾中有一些.html文件。

/manage文件夾/manage(如http://example.org/manage。)在這種情況下,該文件夾包含Slim的PHP框架代碼 - 這意味着index.php文件是在public子文件夾(如在/ var/WWW/mysite的/管理/公共/指數.PHP)

我已經嘗試了很多組合,如

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; 
} 

}

/工作正常反正manage不不是。難道我做錯了什麼?有誰知道我應該改變什麼?

馬修。

+0

我不認爲'根$ URI /(目錄);'會工作,會嗎?當然會出現一些奇怪的,比如'root/manage/manage/public',而不是你想要的。還是我誤解了'$ uri'呢? – Bytewave

+0

@Bytewave好耶,你是對的,它不會工作。這是我已經嘗試過:)讓我們假設沒有$的暢想組合一個URI但是'在/ var/WWW/mysite的/管理/ public'和'在/ var/WWW/mysite的/ static' - 反正它不沒有工作。 – Nubzor

回答

1

要使用像/manage這樣的URI訪問像/var/www/mysite/manage/public這樣的路徑,您需要使用alias而不是root。詳情請參閱this document

我假設你需要從兩個根,在這種情況下,你將需要兩個location ~ \.php塊,見下面的例子運行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

aliastry_files指令由於this long standing bug而不在一起。

在使用if指令意識到this caution

+0

您的例子 – vladkras

+0

@vladkras數倍常見的錯誤和缺陷(https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/)如? –