为什么在PbootCMS中使用Apache伪静态规则会出现“No input file specified.”错误?
在PbootCMS中使用Apache伪静态规则时,有时会出现“No input file specified.”错误。这个问题的原因在于Apache服务器的不同运行模式对伪静态规则的支持有所不同。以下是详细的解释和解决方法:
-
Apache服务器的运行模式:
- 模块化运行方式:这是最常见的运行方式,Apache使用模块化的方式运行PHP。在这种模式下,Apache能够正确解析和处理伪静态规则。
- FastCGI运行方式:在某些情况下,特别是Linux服务器上,Apache可能会使用FastCGI模式运行PHP。FastCGI模式下,Apache处理PHP请求的方式与模块化运行方式不同,导致某些伪静态规则无法正常工作。
-
伪静态规则的区别:
-
默认规则:
apacheRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]这条规则适用于Apache模块化运行方式。它将所有请求重定向到
index.php,并将请求路径作为参数传递。 -
备用规则:
apacheRewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L]这条规则适用于FastCGI运行方式。它通过设置环境变量
PATH_INFO来传递请求路径,而不是直接作为参数。
-
-
错误原因:
- 当Apache使用FastCGI模式运行PHP时,
index.php/$1这种形式的重写规则会导致PHP无法正确识别请求路径,从而报出“No input file specified.”错误。这是因为FastCGI模式下,PHP无法解析index.php/$1这种形式的路径。
- 当Apache使用FastCGI模式运行PHP时,
-
解决方法:
- 检查Apache运行模式:
- 你可以通过查看Apache的配置文件(如
httpd.conf或apache2.conf)来确定当前的运行模式。如果使用了php-fpm或类似的FastCGI配置,说明当前是FastCGI模式。
- 你可以通过查看Apache的配置文件(如
- 修改伪静态规则:
- 如果确认当前是FastCGI模式,需要将伪静态规则从默认规则修改为备用规则。具体操作如下:
- 打开
.htaccess文件。 - 注释掉默认规则:
apache
#RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] - 启用备用规则:
apache
RewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L]
- 打开
- 如果确认当前是FastCGI模式,需要将伪静态规则从默认规则修改为备用规则。具体操作如下:
- 检查Apache运行模式:

扫码添加技术【解决问题】
专注企业网站建设、网站安全16年。
承接:企业网站建设、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、网站漏洞修复等。
专业解决各种疑难杂症,您有任何网站问题都可联系我们技术人员。
本文来自博客园,作者:黄文Rex,转载请注明原文链接:https://www.cnblogs.com/hwrex/p/18577777

浙公网安备 33010602011771号