2015-11-29 42 views
2

我的目標是擁有通配符子域,每個子域都通過自己的目錄服務於php。例如,「www」子域服務於「public_html/www」,「blog」服務於「public_html/blog」。這裏是我的CURENT nginx的配置,讓這部分工作:

server { 
    listen  80; 
    server_name ~^(.*)\.example\.com$; 

    root  /var/www/example.com/public_html/$1; 
    index  index.php index.htm; 

    location ~ \.php$ { 
     fastcgi_split_path_info   ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include   fastcgi_params; 
    } 
} 

爲了測試,我在博客目錄www目錄和index.htm的一個index.php文件。博客子域工作正常,並顯示博客目錄中的index.htm。

但是,www子域不起作用,頁面返回「沒有指定輸入文件」。如果我將「www」硬編碼到根指令而不是「$ 1」中,它可以用於「www」子域,但當然博客也會顯示該內容。

所以,似乎PHP特定位置內的$ document_root沒有評估代表子域的根指令的$ 1。什麼需要改變,或者如何確保在使用$ document_root時評估根目錄?

回答

2

嘗試使用命名捕獲而不是數字捕獲。

server_name ~^(?<subsystem>.+)\.example\.com$; 
root  /var/www/example.com/public_html/$subsystem; 

也許root評估晚期(我不知道)和$1location正則表達式覆蓋。

+0

看起來像這樣做!稍後我會繼續進行一些進一步的測試,但現在,僅通過這一更改就可以消除錯誤並顯示我的內容。謝謝! – justinvoelker

相關問題