使用更簡單的方法,fastcgi子產品自帶了一個fastcgi_split_path_info指令專門用來解決此類問題的,該指令會根據給定的正規表達式來分隔URL,進而提取出腳本名和path info資訊,使用這個指令可以避免使用if語句,配置更簡單。
另外判斷檔案是否存在也有更簡單的方法,使用try_files指令即可。 [plain] view plain copy
- server {
- ...
- location / {
- index index.htm index.html index.php;
- #如果檔案不存在則嘗試TP解析
- try_files $uri /index.php$uri;
- }
- location ~ .+\.php($|/) {
- root /var/www/html/website;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- #設定PATH_INFO,注意fastcgi_split_path_info已經自動改寫了fastcgi_script_name變量,
- #後面不需要再改寫SCRIPT_FILENAME,SCRIPT_NAME環境變量,是以必須在加載fastcgi.conf之前設定
- fastcgi_split_path_info ^(.+\.php)(/.*)$;
- fastcgi_param PATH_INFO $fastcgi_path_info;
- #加載Nginx預設"伺服器環境變量"配置
- include fastcgi.conf;
- }
- }