2012-04-10 87 views
7
server { 
    listen  80; 
    server_name pwta; 
    root html; 

    location /test/{ 
     alias html/test/; 
     autoindex on; 
    } 
    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

此配置有效。但是,如果location /test/被替換,例如location /testpath/它不起作用(沒有指定輸入文件)。我根據別名指令的解釋假定「位置」部分被丟棄,因此/testpath/info.php將導致html/test/info.phpnginx別名+位置指令

感謝您的任何建議。

回答

10
nginx alias

server { 
    listen  80; 
    server_name pwta; 
    index index.html index.php; 
    root html; 

    location /testpath/ { 
     alias html/test/; 
    } 
    location ~ ^/testpath/(.+\.php)$ { ### This location block was the solution 
     alias html/test/;  
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$1; 
     include fastcgi_params; 
    } 
    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
+0

我不完全明白爲什麼這樣做,但確實解決了問題。任何人都可以添加更多關於中間位置塊的更多解釋嗎? – Brad 2013-12-04 20:33:57

+0

添加'alias'將有效地覆蓋'$ document_root'到任何別名。請注意,它不會影響'$ fastcgi_script_name'或'$ request_filename'。使用新的'$ document_root'和正則表達式匹配文件名,解析爲腳本文件。 – Gajus 2015-03-27 16:55:50

+0

注意,當請求位於'/ testpath /'下時,最後一個位置塊沒有做任何事情。 – Gajus 2015-03-27 17:02:20

8

兩者aliasroot指令最好用絕對路徑使用。您可以使用相對路徑,但它們與用於編譯nginx的prefix配置選項相關,並且通常不是您想要的。

您可以通過執行nginx -V並找到--prefix=後面的值來查看此信息。

通過查看日誌證明這一點,你會發現一個「沒有這樣的文件」的錯誤。

+1

請注意,應該是'-V'而不是'-v'(應該是大寫,小寫只給出版本號) – Basic 2015-01-05 12:18:40