最完美解決Nginx部署ThinkPHP專案的辦法
阿新 • • 發佈:2019-01-07
網上通用解決方法的配置如下:
其實應該使用更簡單的方法,fastcgi模組自帶了一個fastcgi_split_path_info指令專門用來解決此類問題的,該指令會根據給定的正則表示式來分隔URL,從而提取出指令碼名和path info資訊,使用這個指令可以避免使用if語句,配置更簡單。
另外判斷檔案是否存在也有更簡單的方法,使用try_files指令即可。
server { ... location / { index index.htm index.html index.php; #訪問路徑的檔案不存在則重寫URL轉交給ThinkPHP處理 if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; break; } } location ~ \.php/?.*$ { root /var/www/html/website; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; #載入Nginx預設"伺服器環境變數"配置 include fastcgi.conf; #設定PATH_INFO並改寫SCRIPT_FILENAME,SCRIPT_NAME伺服器環境變數 set $fastcgi_script_name2 $fastcgi_script_name; if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") { set $fastcgi_script_name2 $1; set $path_info $2; } fastcgi_param PATH_INFO $path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2; fastcgi_param SCRIPT_NAME $fastcgi_script_name2; } }
其實應該使用更簡單的方法,fastcgi模組自帶了一個fastcgi_split_path_info指令專門用來解決此類問題的,該指令會根據給定的正則表示式來分隔URL,從而提取出指令碼名和path info資訊,使用這個指令可以避免使用if語句,配置更簡單。
另外判斷檔案是否存在也有更簡單的方法,使用try_files指令即可。