
thinkphp在于Apache下的伪静态规则文件名是.htaccess,具体规则为:
<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>对于Nginx下的伪静态文件名是Nginx.conf,具体规则如下:
location / {
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php?s=/$1 last;
}
} IIS下的伪静态规则在web.config里,该文件通常在根目录(或运行目录下),可以通过在IIS里导入.htaccess规则的方式自动生成。
今天想说的是一个关于IIS10提示;No input file specified”的问题,从字面上的解释是没有指定输入文件,实际的意思就是找不到执行相应脚本的模块映射。比如用IIS创建的站点无法执行php程序,即是一个echo也无法响应。出现这个问题一般从以下几个地方排查:
第一、检查IIS站点的脚本映射是否有PHP的FastCGIMode模块。
第二、检查站点对应的应用程序池状态是否是无托管代码状态,如是选择一个NET托管,不管是经典还是集成选一个。
第三、这一条最奇葩,就是检查站点的根目录下是否有.user.ini的文件,这个文件一般是Linux系统下的产物,但如果在Windows环境下测试时包含这个文件,一般也会报No input file specified错误,无法修复,删除此文件立马就好。
第四、将RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]改为RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]。
第五、找到PHP.ini中的doc_root行,注释掉此行,然后重启IIS。找到php.ini中的cgi.force_redirect ,去掉前面分号,把后面的1改为0,即cgi.force_redirect = 0
如果你在本地测试的时候遇到“No input file specified”错误,从以上几点排查一般就可以解决。