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

更新时间:
复制为 MD 格式

问题原因

通常由于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字段所在行前添加半角分号;注释代码。

        ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
        ; if you are running php as a CGI under any web server (other than IIS)
        ; see documentation for security issues.  The alternate is to use the
        ; cgi.force_redirect configuration below
        ; http://php.net/doc-root
        ; doc_root =
        ; The directory under which PHP opens the script using /~username used only
        ; if nonempty.
        ; http://php.net/user-dir
        user_dir =
      2. 修改cgi.force_redirect

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

        ; cgi.force_redirect is necessary to provide security running PHP as a CGI
        ; most web servers.  Left undefined, PHP turns this on by default.  You can
        ; turn it off here AT YOUR OWN RISK
        ; **You CAN safely turn this off for IIS, in fact, you MUST.**
        ; http://php.net/cgi.force-redirect
        cgi.force_redirect = 0
        ; if cgi.nph is enabled it will force cgi to always sent Status: 200 with
        ; every request. PHP's default behavior is to disable this feature.
        ;cgi.nph = 1
    2. 重启IIS服务。

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

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

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