我們都知道,使用僞靜態相對來說,對搜索引擎比較友好,而我在服務器空間上啓用REWRITE的僞靜態功能的時候,首頁可以訪問,而訪問內頁的時候,就提示:“No input file specified.”。
百度搜索了一下,發現還有其它空間商也有此問題,原因在於空間所使用的PHP是fast_cgi模式,而在某些情況下, 不能正確識別path_info所造成的錯誤,就是Wordpress也有一樣的問題,還好找到了解決方案!
我們首先來看一下Wordpress及Typecho等程序默認的.htaccess裏面的規則:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
而提示是說:“No input file specified.”,也就是說沒有得到有效的文件路徑。在Google中找到了解決方案,就是修改一下僞靜態規則,如下:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
在正則結果“$1”前面多加了一個“?”號,問題應該解決了。
但沒想到還是出現 No input file specified 因爲項目用了URL route,估摸着可能是rewrite的問題。
再次記錄一下解決方案。
1.檢查doc_root 是否設置此值
2.檢查.htaccess文件 , 很多框架都是index.php當入口文件。
默認的
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
規則在apache fastcgi模式下會導致No input file specified.
修改成
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
OK,URL正常重寫,網址訪問成功!
還有一種可能,針對IIS服務器的:
在php.ini文件裏面修改:
1、增加一行(這個最重要)
fastcgi.impersonate = 1
2、修改兩項(解開註釋)
cgi.fix_pathinfo=1
cgi.force_redirect = 0
對於Nginx服務器還需做如下修改:
在nginx/conf/nginx.conf 找到:
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
改爲:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
重啓服務器就可以了。
轉自http://www.4u4v.net/no-input-file-specified-solution-apache-iis-nginx-server-appears.html