Php
“未指定輸入文件”錯誤 - NginX / fcgi - 請求不存在的 .php 文件時
我讓 NginX 使用 fcgi 為一個 drupal 站點提供服務。嘗試瀏覽到不存在的 php 文件(例如 www.example.com/this-file-doesn't-exist.php)會導致出現以下錯誤的白屏:
‘未指定輸入文件’
我使用這篇文章來幫助我設置 NginX: http ://drupal.org/node/110224
這是我的 NginX 配置文件:
server { listen 1.2.3.4:80 default; server_name www.example.com; client_max_body_size 6M; root /var/www/example.com/; index index.php; error_page 404 /index.php; error_page 403 /403.html; # set up a location to serve static images for static error pages location ^~ /error_images/ { root /var/www/static_pages/error_pages; access_log off; expires 30d; } # use our own custom 403 page location = /403.html { root /var/www/static_pages/error_pages; } # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/static_pages/error_pages; } location / { error_page 404 index.php; error_page 403 /403.html; # the main drupal app if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; } } # hide protected files location ~* \.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$ { deny all; } # serve static files directly location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico)$ { rewrite ^/favicon.ico$ /sites/example.com/themes/exampletheme/favicon.ico break; access_log off; expires 30d; } # imagecache needs to have php read any files that it's planning to manipulate location ^~ /sites/example.com/files/imagecache/ { index index.php index.html; # assume a clean URL is requested, and rewrite to index.php if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; break; } } # serve the app via fastcgi location ~ \.php$ { # ensure that a 404 is returned if a non existant php file is requested # doesn't seem to work properly, so commenting out # fastcgi_intercept_errors on; fastcgi_pass unix:/tmp/php-fastcgi.sock; fastcgi_index index.php; fastcgi_read_timeout 240; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
這篇文章http://forum.slicehost.com/comments.php?DiscussionID=1259表明它可能是權限錯誤。但是,我以 user:group nginx:nginx 的身份啟動 fcgi,這與 NginX 執行的使用者相同。
一般來說,配置工作得很好,並且網站 100% 正常工作。只有在請求一個不存在的 .php 文件時才會出現問題。例如,請求一個不存在的 .html 文件會導致 Drupal 為其提供 404 錯誤頁面——這也是我希望對不存在的 .php 文件發生的情況。
附言。如果您想查看該網址,請刪除 http:// 之後的多餘空格 - 我沒有足夠的代表發布多個超連結!
您可以嘗試改用 try_file。
例如對於 wordpress。相應地適應。
location /wordpress { try_files $uri $uri/ @wordpress; } location @wordpress { fastcgi_pass 127.0.0.1:9000; fastcgi_split_path_info ^(/wordpress)(/.*)$; fastcgi_param SCRIPT_FILENAME /var/www/wordpress/index.php; fastcgi_param PATH_INFO $fastcgi_path_info; }
該錯誤實際上是由 PHP over fastcgi 引起的。你會得到與 apache 相同的響應。您可以讓您的網路伺服器在將文件發送到 php.ini 之前檢查該文件是否存在。使用 Apache,您可以使用 mod_rewrite 來執行此操作,但我對 nginx 的了解還不夠,無法幫助您實現它。另一種方法是查看 PHP 是否有一個配置選項,該選項允許您在找不到請求的 php 文件時修改行為。