thinkphp5開發的網站出現”No input file specified”(php版本5.6.27)
一、總結
一句話總結:搜索引擎一定要用google,比百度節約時間一萬倍,google啊,google搜索出來直接有視頻,還有其他很多好處
1、出現的問題是什么?
No input file specified
訪問php頁面跳出來一句 ”No input file specified”
這句錯誤提示的意思是不能識別訪問的路徑
2、出現問題的原因是什么?
fast_cgi
原因在於使用的PHP5.6是fast_cgi模式,而在某些情況下,不能正確識別path_info所造成的錯誤。
3、如何解決?
.php?
Rewrite模塊
允許 .htaccess
ab兩個步驟一般不需要我們操作,核心就是c步驟
注意:thinkphp的.htaccess規則實在public目錄下
這里才是網站的根目錄
c、將.htaccess規則里面的匹配.php改成匹配.php?(核心操作)
默認的.htaccess里面的規則:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
“No input file specified.”,是沒有得到有效的文件路徑造成的。
修改偽靜態規則,如下:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
有沒有發現不同?
其實就是在正則結果“/$1”前面多加了一個“?”號,問題也就隨之解決了。
a、加載Rewrite模塊(默認不需要操作)
在apache的conf目錄下httpd.conf(apache的配置文件)中找到
LoadModule rewrite_module modules/mod_rewrite.so
這句,去掉前邊的注釋符號“#”,或添加這句。
b、允許使用“.htaccess”文件(默認不需要操作)
在apache配置域名的時候允許使用“.htaccess”文件
例如:
<VirtualHost *:80> DocumentRoot "C:\phpStudy\PHPTutorial\WWW\m_Orchestrate-master\m_Orchestrate\public" ServerName mo.eduhk.hk <Directory "C:\phpStudy\PHPTutorial\WWW\m_Orchestrate-master\m_Orchestrate\public"> Options -Indexes -FollowSymLinks +ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> </VirtualHost>
允許在任何目錄中使用“.htaccess”文件,將“AllowOverride”改成“All”(默認為“None”):
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be “All”, “None”, or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
在Windows系統下不能直接建立“.htaccess”文件,可以在命令行下使用“echo a> .htaccess”建立,然后使用記事本編輯。
4、thinkphp的根目錄public中的.htaccess修改好后的樣子?
IfModule
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] </IfModule>
5、正則里面的“?”是什么意思?
零次或一次 非貪婪
“?:”非獲取匹配,匹配冒號后的內容但不獲取匹配結果,不進行存儲供以后使用。
單獨的“?”:匹配前面的子表達式零次或一次。
當“?”緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})后面時,匹配模式是非貪婪的。非貪婪模式盡可能少地匹配所搜索的字符串,而默認的貪婪模式則盡可能多地匹配所搜索的字符串。
6、.htaccess文件是做什么的?
分布式配置文件 目錄 配置
.htaccess文件(或者"分布式配置文件"),全稱是Hypertext Access(超文本入口)。提供了針對目錄改變配置的方法, 即,在一個特定的文檔目錄中放置一個包含一個或多個指令的文件, 以作用於此目錄及其所有子目錄。作為用戶,所能使用的命令受到限制。管理員可以通過Apache的AllowOverride指令來設置。
7、.htaccess文件中如何配置系統允許上傳的文件的大小及數目?
IfModule php_value
apache中的都配置都是IfModule這樣一塊一塊的
<IfModule mod_php5.c>
php_value upload_max_filesize 100M
php_value post_max_size 100M
</IfModule>
二、內容在總結中