2016-05-12 80 views
1

目前我正在與webprojects以下目錄結構(簡體):NGINX重寫請求文件外部根

  • project_folder/
    • 公共/
    • 根/
    • 指數。 php

我想要做的是設置根服務器塊:

root /project_folder/root/; 

但是,當一個請求位置不存在,我希望它轉發給project_folder/index.php的請求。我試過以下內容:

try_files $uri ../index.php?$query_string; 

但是這似乎不起作用。

這同樣適用於與開始的請求$ DOCUMENT_ROOT /公/ *,它需要轉發到:$ DOCUMENT_ROOT /../公共/ *

我沒有加入在index.php文件管理這包含/project_folder/index.php的/ project_folder/root /文件夾。對於公用文件夾,我創建了一個符號鏈接。我可能可以通過爲位置/ public /添加一個別名來解決這個問題,但是我試圖保持我的配置儘可能通用。

我試圖阻止將project_folder設置爲根文件夾,因爲它有時包含我不希望從網絡上訪問的文件。介紹'根'文件夾是新的,但我試圖儘可能有效地做到這一點。現有的Web項目還沒有根文件夾。

正是我想要做的事情,我將如何能夠實現這一點。

在此先感謝。

回答

2

通常PHP文件是由location ~ \.php$塊(或類似的)處理的。我假設index.php不是您的應用程序中唯一的PHP文件,並且要處理/root/目錄結構中的PHP文件,該位置將需要使用root /project_folder/root

對於開始/public的URI,您可以指定一個不同的root,並使用指定的位置來執行超出根目錄的index.php文件。

事情是這樣的:

root /project_folder/root; 

location/{ 
    try_files $uri $uri/ @index; 
} 

location /public { 
    root /project_folder; 
} 

location @index { 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME /project_folder/index.php; 
    fastcgi_pass ...; 
} 

location ~ \.php$ { 
    try_files $uri =404; 

    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_pass ...; 
} 
+0

這個例子給了我很多的工作。我設法刪除了公共符號鏈接,並且還設法在指定位置的幫助下刪除索引文件。謝謝! –