没有指定输入文件

Col*_*rts 38 php apache .htaccess anchor-cms

我正在运行Anchor CMS,我刚刚升级到0.8版.当我尝试运行安装程序时,我收到"未指定输入文件"错误.我相信它很可能是一个.htaccess问题,但我不确定应该是什么样的正确设置.

我的网站可以在这里找到.

我的.htaccess设置为:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase {base}

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule ^(.*)$ {index} [L]
</IfModule>

<IfModule !mod_rewrite.c>
ErrorDocument 404 index.php
</IfModule>
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我也使用GoDaddy作为托管服务提供商.

Rep*_*pox 107

由于在服务器上实现了PHP,因此指定No输入文件是您显示的消息,在这种情况下表示CGI实现(可以通过验证phpinfo()).

现在,为了正确解释这一点,您需要对系统如何使用URL有一些基本的了解.根据您的.htaccess文件,您的CMS似乎希望将URL作为PATH_INFO变量传递.CGI和FastCGI实现没有PATH_INFO可用,因此在尝试传递URI时,PHP会失败并显示该消息.

我们需要找到一个替代方案.

一种选择是尝试解决这个问题.查看核心php.ini指令的文档,您可以看到您可以更改实现的工作方式.虽然,GoDaddy可能不允许您在共享环境中更改PHP设置.

我们需要找到修改PHP设置一个替代
展望system/uri.php第40行,你会看到,CMS尝试两种类型的URI的检测-第一个是PATH_INFO,我们刚刚得知将无法正常工作-另一个是REQUEST_URI.

这基本上应该足够了 - 但是传递的URI的解析会给你带来更多的麻烦,因为你可以传递给REQUEST_URI变量的URI 强制parse_url()只返回URL路径 - 这基本上会让你回到零.

现在,实际上只剩下一个可能性了 - 这正在改变CMS的核心.URI检测部分不足.

添加QUERY_STRING到第40行的数组作为第一个元素,system/uri.php并将.htaccess更改为如下所示:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ index.php?/$1 [L]
Run Code Online (Sandbox Code Playgroud)

这会将您请求的URI传递给URI index.php,QUERY_STRING并通过URI检测来查找它.

另一方面,这使得在不更改核心文件的情况下更新CMS是不可能的,直到修复为止.那糟透了......

需要更好的选择吗?
找一个更好的CMS.

  • 谢谢!在虚拟共享主机上的ExpressionEngine中,我的.htaccess中有`RewriteRule ^(.*)$ /index.php/$1 [L]`(无问号).今天突然出现了OP的错误信息.我想网络主机更新了一些东西.`RewriteRule ^(.*)$ /index.php?/$1 [L]`(带问号)修复了它. (9认同)
  • 我曾经:`RewriteEngine On``RewriteCond%{REQUEST_FILENAME}!-f``RewriteCond%{REQUEST_FILENAME}!-d``RewriteRule.*index.php/$ 0 [PT]`......当我有了刚刚将最后一行更改为:`RewriteRule ^(.*)$ index.php?/ $ 1 [L]` (3认同)

小智 22

引用http://support.statamic.com/kb/hosting-servers/running-on-godaddy:

如果您想使用GoDaddy作为主机,并且您发现自己在控制面板中收到"未指定输入文件"错误,则需要php5.ini使用以下规则在weboot中创建一个文件:

cgi.fix_pathinfo = 1

最简单的答案只需一行更改,你就完成了.

推荐给godaddy托管.

  • 也许您想引入相关代码并进行解释.如果链接过时,那么您的回答将对未来的访问者毫无意义. (4认同)
  • 我尝试了你的建议,它就像一个魅力!将`cgi.fix_pathinfo = 1`添加到您的php5.ini文件中 (3认同)

jba*_*ina 8

在我的例子中,php.ini open_basedir变量中有一个错误.


web*_*icy 6

我有同样的问题.我所做的就是修复我的htacces文件,如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /crm/

Options +FollowSymLinks 

RewriteCond %{HTTP_HOST} ^mywebsite.com [NC] 

RewriteRule ^(.*)$ http://www.mywebsite.com/$1 [L,R=301] 

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L]

RewriteRule ^index.php/(.*)$ [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)