访问部署在ECS实例上的Web站点,提示“No input file specified”错误,如何处理?

问题原因

通常由于Web服务器无法找到指定的PHP文件或脚本导致。可能原因如下:

  • open_basedir 限制: 检查网站根目录下的.user.ini文件,确认open_basedir配置项的值包含了网站所需的所有目录访问权限。

  • 伪静态规则配置错误:检查网站配置文件中的伪静态(rewrite)规则,确保规则没有将请求错误地重定向到不存在的 PHP 文件。

  • PHP处理器配置错误:检查网站配置文件中与PHP运行模式相关的设置,确保Web服务器能够正确地将请求传递给 PHP 解释器。

解决方案

Linux

Alibaba Cloud Linux 3为例。

  1. 登录ECS实例。

    1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

    2. 进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。根据页面提示登录,进入终端页面。

  2. 检查是否存在open_basedir 限制。

    1. 检查Web站点目录下是否存在.user.ini隐藏配置文件。

      sudo ls -la <网络站点目录>
      Web站点目录/www/wwwroot/www.abc.com/为例,需执行sudo ls -la /www/wwwroot/www.abc.com/
      • 若存在,需继续排查是否受到open_basedir 限制;

      • 若不存在,表明未受open_basedir 限制,需修改配置文件

    2. 检查是否受到open_basedir 限制。

      .user.ini中找到open_basedir 开头的行,检查等号右侧目录列表是否包含了目标Web站点的完整根目录路径。

      Web站点目录/www/wwwroot/www.abc.com为例,若隐藏文件.user.ini中的open_basedir=/www/wwwroot/www.test.com/:/tmp/,表示未包含Web站点目录,需修改。
  3. 修改配置文件。

    Apache

    1. 检查并修正.htaccess文件。

      进入网站根目录下,查看是否存在.htaccess文件,若存在,需确保RewriteRule所在行配置如下。

      确保请求正确重定向到index.php 中。
      RewriteRule ^(.*)$ /index.php?/$1 [L]
    2. 重启Apache服务。

      sudo systemctl restart httpd

    Nginx

    1. 检查并修正php.ini配置。

      编辑/etc/php.ini文件,确保cgi.fix_pathinfo参数值为1

      默认值为1,PHP会尝试加载与URL匹配的实际存在的文件,兼容性更好。
    2. 检查并修正fastcgi.conf配置。

      编辑/etc/nginx/fastcgi.conf文件,确保文件已保存如下配置。确保Web服务器能够正确地将请求传递给 PHP 解释器。

      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param DOCUMENT_ROOT $document_root;
    3. 重启Nginx服务。

      sudo systemctl restart nginx
  4. 验证网站是否恢复访问

    完成上述修复后,重新访问网站。

Windows

Windows Server 2022,IIS Web服务为例。

  1. 登录ECS实例。

    1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

    2. 进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。选择连接方式为终端连接,输入账号和密码,登录图形化终端页面。

  2. 检查是否存在open_basedir 限制。

    1. 检查Web站点目录下是否存在.user.ini隐藏配置文件。

      单击文件栏上方的查看,勾选隐藏的文件

    2. 检查是否受到open_basedir 限制。

      .user.ini中找到open_basedir 开头的行,检查等号右侧目录列表是否包含了目标Web站点的完整根目录路径。

      Web站点目录C:/inetpub/wwwroot/mywebsite为例,若隐藏文件.user.ini中的open_basedir = "C:/inetpub/wwwroot/abc,表示未包含Web站点目录,需修改。
  3. 排查IISPHP处理器配置。

    1. 编辑php.ini文件。

      1. 注释doc_root

        doc_root字段所在行前添加半角分号;注释代码。image

      2. 修改cgi.force_redirect

        删除cgi.force_redirect = 1字段所在行前的;,并将参数值从1修改为0。不强制要求PHP脚本必须通过网页访问。image

    2. 重启IIS服务。

      Win+R输入PowerShell并按Enter键,进入PowerShell界面后,重启IIS服务。

      iisreset /noforce
  4. 验证网站是否恢复访问。

    完成上述修复后,重新访问网站。