Ubuntu
改寫後nginx不使用php-fastcgi
我在 nginx 重寫時遇到問題。我想重寫
^(.*?)/(.*?)/?$
為controllers/$1.php?action=$2
. 這在之前的 Apache 伺服器上對我有用。之後,我想將該文件路由到 php-fastcgi。對於正常請求(即,當我輸入完整路徑時,不使用重寫),php-fastcgi 可以正常工作。
我的配置:
server { listen [::]:80; root /var/www/my-dir; index index.php index.html index.htm; charset utf-8; server_name my-domain; location / { autoindex off; rewrite ^(.*?)/(.*?)/?$ controllers/$1.php?action=$2 last; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } location ~ /\. { deny all; } }
在編輯了這個配置之後,我
service nginx restart
當然做了一個。由於某種原因,php-fastcgi 的位置塊在重寫後沒有使用。為什麼會這樣以及如何解決?
相反,我收到“未指定輸入文件”作為響應。在錯誤日誌中,我看到:
2013/06/01 19:00:25 [error] 14288#0: *1 access forbidden by rule, client: xxx, server: my-domain, request: "GET /user/create HTTP/1.1", host: "my-domain"
你缺少一個
try_files
.location / { try_files $uri $uri/ /index.php; # ....everything else }
您可能還會遇到問題,因為相對 URL 的開頭
rewrite
沒有 a 。嘗試將其更改為./``controllers/$1.php...``/controllers/$1.php...
而且,您缺少告訴 php-fpm 在哪裡可以找到 PHP 腳本的 fastcgi 參數。將此添加到
location ~ \.php$
塊中。fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;