我正在运行Anchor CMS,我刚刚升级到0.8版。当我尝试运行安装程序时,我收到“未指定输入文件”错误。我相信它很可能是一个.htaccess问题,但我不确定应该是什么样的正确设置。
我的网站可以找到here。
我的.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>
如果有帮助,我也会使用GoDaddy作为托管服务提供商。
答案 0 :(得分:106)
指定无输入文件是因为您的服务器上实现了PHP而呈现的消息,在这种情况下表示CGI实现(可以使用phpinfo()
进行验证)。
现在,为了正确解释这一点,您需要对系统如何使用URL有一些基本的了解。根据您的.htaccess文件,您的CMS似乎希望将URL作为PATH_INFO
变量传递。 CGI和FastCGI实现没有PATH_INFO
可用,因此在尝试传递URI时,PHP会失败并显示该消息。
我们需要寻找替代方案。
一种选择是尝试解决此问题。查看core php.ini directives的文档,您可以看到您可以更改实现的工作方式。虽然,GoDaddy可能不允许您在共享环境中更改PHP设置。
我们需要找到修改PHP设置的替代方法
查看第40行的system/uri.php
,您会看到CMS尝试两种类型的URI检测 - 第一种是PATH_INFO
,我们刚刚学到的不起作用 - 另一种是{{1} }。
这基本上应该足够了 - 但是传递URI的解析会给你带来更多麻烦,因为你可以传递给REQUEST_URI
变量的URI会强制parse_url()
仅返回URL路径 - 基本上会让您回到零。
现在,实际上只剩下一个可能性了 - 这正在改变CMS的核心。 URI检测部分不足。
将REQUEST_URI
添加到第40行的数组中,作为 QUERY_STRING
中的第一个元素,并将.htaccess更改为如下所示:
system/uri.php
这会将您请求的URI传递给RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
index.php
,并通过URI检测来查找它。
另一方面,这使得在不修改核心文件之前更新CMS是不可能的,直到修复为止。那糟透了......
需要更好的选择吗?
找一个更好的CMS。
答案 1 :(得分:20)
引用http://support.statamic.com/kb/hosting-servers/running-on-godaddy:
如果您想将GoDaddy用作主机,并且您发现自己在控制面板中收到“未指定输入文件”错误,则需要使用以下规则在weboot中创建
php5.ini
文件:
cgi.fix_pathinfo = 1
最简单的答案就是只换一行就可以了。
推荐给godaddy托管。
答案 2 :(得分:7)
就我而言,php.ini open_basedir变量中存在错误。
答案 3 :(得分: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>
答案 4 :(得分:3)
GoDaddy目前(2013年2月)支持使用PHP 5.2.x或更早版本修改某些帐户的FastCGI。请参阅GoDaddy文章“Disabling FastCGI in Your Hosting Account” (就我而言,显然有必要帮助将当前版本的LimeSurvey(2.0)推向运行状态。)
答案 5 :(得分:2)
添加php5.ini根本不起作用。 但请参阅&#39; 禁用FastCGI &#39;本文关于GoDaddy的部分:http://support.godaddy.com/help/article/5121/changing-your-hosting-accounts-file-extensions
将这些行添加到.htaccess文件(webroot&amp;网站安装目录):
Options +ExecCGI
addhandler x-httpd-php5-cgi .php
它节省了我一天!干杯! 谢谢DragonLord!
答案 6 :(得分:2)
它对我有用..添加在.htaccess文件之上。它会在godaddy共享主机帐户上禁用FastCGI。
选项+执行
addhandler x-httpd-php5-cgi .php
答案 7 :(得分:2)
运行ulimit -n 2048
然后重启php / php-fpm
答案 8 :(得分:0)
我的解决方案是删除其中一个帮助文件中的空格。错误列出了两个页面,一个CI会话文件和一个自定义帮助程序。
答案 9 :(得分:0)
更新
以前的所有评论均由我测试过,但没有解决方案。但是我没有放弃。
解决方案
在我的NGINX配置中取消注释以下行
[/etc/nginx/site-avaible/{sitename}.conf]
启用网站的文件夹中应遵循相同的代码
#fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
对此发表评论:
fastcgi_param SCRIPT_FILENAME / www / {namesite} / public_html $ fastcgi_script_name;
我与原始内容进行了多次更改:
#fastcgi_pass unix: /var/php-nginx/9882989289032.sock;
回到此:
#fastcgi_pass 127.0.0.1:9007;
最后我找到了可行的方法...
fastcgi_pass localhost: 8004;
我也建议这些行...
#fastcgi_index index.php;
#include fastcgi_params;
甚至是FastCGI超时(仅用于提高性能)
fastcgi_read_timeout 3000;
在此过程中,我检查了NGINX日志是否进行了所有修改。 (这很重要,因为它显示了错误的参数。)
在我的情况下是这样,但取决于配置:
error_log/var/log/nginx/{site}_error_log;
测试NGINX配置
nginx -t
请注意,这是选项之一... 在同一台服务器上,该站点上无法使用的服务器在其他服务器上也可以使用...因此请记住,设置取决于平台。
在这种情况下,它用于Joomla CMS。
答案 10 :(得分:0)
在我的情况下,我通过将规则插入LocationMatch Directive
中来修复了问题<LocationMatch "^/.">
#your rewrite rules here
</LocationMatch>
/.
匹配任何个位置
我在Apache 非.conf
文件的.htaccess
文件之一中具有重写规则。
我不知道为什么这对我有用,这是我当前的设置
答案 11 :(得分:0)
禁用PHP-FPM解决了我的问题。