1.原本搞好了php的配置,想把目錄下移一層 從 www.abc.com 變成 www.abc.com/wxapi ,因爲個人真實文件目錄比路由少了一層public 嘗試了不少辦法都不行 甚至想到了upstream+proxy_pass 但因爲是內部轉發會致使獲取request url路徑出問題。php
例如個人路徑是 www.abc.com/wxapi 想獲取 /wxapi/public/index.php 用nginx各類正則也沒法匹配對。由於$fastcgi_script_name 這裏直接就是/wxapi/info.php,不能在中間硬插一個路徑html
在將近花費半天后 終於搞定 。終於搞清了fastcgi是如何匹配的
1.獲取變量$fastcgi_script_name
2.用正則匹配出不含子路徑/wxapi/的變量
3.拼接出真實的script_name地址。 #$real_script_name
4.這樣fastcgi就能夠解析最後的$doucument_root/$real_script_name 文件了
貼下代碼nginx
location /wxapi/ { alias /usr/local/www/wxapi/public/; index index.php index.html index.htm; try_files $uri $uri/ index.php$is_args$args; } # location ~ \.php { # echo 'fuck'; # } location ~ ^/wxapi/.*\.php { # 設置文件根路徑 root /usr/local/www/wxapi/public/; include fastcgi_params; set $path_info ""; set $real_script_name $fastcgi_script_name; ##正則匹配URI,若能匹配將產生兩個子組 if ($fastcgi_script_name ~ "^(/wxapi/)(.+?\.php)(/.+)?$") { ##將兩個子組賦值給剛生成的兩個nginx變量 set $real_script_name $2; #拼接出真實的script_name地址。 #$real_script_name set $path_info $3; #支持pathinfo參數 } # echo "real_script_name----$real_script_name"; # echo "path_info----$path_info"; # echo "document_root----$document_root"; fastcgi_index index.php; # 這裏必定要多一個/否則匹配會替換掉 fastcgi_param SCRIPT_FILENAME $document_root/$real_script_name; fastcgi_param PATH_INFO $path_info; fastcgi_pass unix:/usr/local/php-7.2.12/var/run/php-cgi.sock; }