2016-12-07 219 views
3

我在直接聯繫一個nginx的CONF與自定義位置:管理嚮導+的Nginx + PHP + FPM位置:未找到文件

代碼:

location /reset-password { 
    alias /home/**/domains/**.**/public_html/api/frontend-scripts/resetPassword; 
    include /usr/local/directadmin/data/users/**/nginx_php.conf; 
} 

這不是工作; nginx顯示'文件未找到'。爲瀏覽器中的所有PHP相關文件。純HTML的工作正常。

我已經嘗試過其他幾種解決方案,即:

代碼:「找不到文件」

location /reset-password { 
    alias /home/**/domains/**.**/public_html/api/frontend-scripts/resetPassword; 
    # use fastcgi for all php files 
    location ~ \.php$ 
    { 
     try_files $uri index.php; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     include /etc/nginx/fastcgi_params; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include /etc/nginx/nginx_limits.conf; 
     if (-f $request_filename) 
     { 
      fastcgi_pass unix:/usr/local/php56/sockets/**.sock; 
     } 
    } 
} 

所有這些都給人一種在瀏覽器中。

所以它可能與phpfpm有關,但我沒有選擇。我究竟做錯了什麼?

回答

2

在PHP中使用alias始終存在問題,因爲$document_root$fastcgi_script_name語句不再有效。

你可以使用:

fastcgi_param SCRIPT_FILENAME $request_filename; 

但是一個open bug in nginx使得使用try_filesalias一點莫測。

我的優選解決方案是不可見地重寫URI,使得root directive可以使用:

location ^~ /reset-password { 
    rewrite ^/reset-password(.*)$ /resetPassword$1 last; 
} 
location ^~ /resetPassword { 
    root /home/**/domains/**.**/public_html/api/frontend-scripts; 
    ... 
} 

還要注意,^~修飾符使these prefix location blocks接管其它正則表達式的位置的塊的優先級在相同的水平(例如另一個location ~ \.php$塊)應該有一個。

+0

理查德,非常感謝你,你的解決方案開箱即用 –

+0

啊,你是救命啊!現在已經掙扎了好幾個小時了。 fastcgi_param完成了任務! – Araw