我正在运行锚点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>
如果有帮助,我也使用 GoDaddy 作为托管服务提供商。
未指定输入文件是由于服务器上的 PHP 实现而向您显示的消息,在这种情况下表示 CGI 实现(可以使用 phpinfo()
进行验证)。
现在,要正确解释这一点,您需要对系统如何使用URL有一些基本的了解。根据您的 .htaccess 文件,您的 CMS 似乎希望 URL 作为PATH_INFO
变量传递。CGI 和 FastCGI 实现没有可用的PATH_INFO
,因此当尝试传递 URI 时,PHP 会失败并显示该消息。
我们需要找到一个替代方案。
一种选择是尝试解决此问题。查看核心 php.ini 指令的文档,您可以看到您可以更改实现的工作方式。虽然,GoDaddy可能不允许您更改共享环境中的PHP设置。
我们需要找到修改 PHP 设置
的替代方案查看第 40 行的system/uri.php
,您将看到 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]
这会将你请求index.php
的 URI 作为QUERY_STRING
传递,并具有 URI 检测来查找它。
另一方面,这使得在解决此问题之前无法在不更改核心文件的情况下更新CMS。糟糕透了。。。
需要更好的选择?
查找更好的内容管理系统。
引用 http://support.statamic.com/kb/hosting-servers/running-on-godaddy:
如果您想使用 GoDaddy 作为主机,并且发现自己在控制面板中收到"未指定输入文件"错误,则需要使用以下规则在 weboot 中创建一个
php5.ini
文件:
cgi.fix_pathinfo = 1
最好的简单答案只需更改一行,您就可以设置好了。
推荐用于 GoDaddy 托管。
就我而言,php.ini open_basedir 变量中存在错误。
我遇到了同样的问题。我为解决此问题所做的只是像这样修改我的 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>
GoDaddy 目前(13 年 2 月)支持对某些使用 PHP 5.2.x 或更早版本的帐户修改 FastCGI。 请参阅 GoDaddy 文章"在您的主机帐户中禁用 FastCGI"。
(就我而言,这显然是必要的,以帮助使当前版本的LimeSurvey(2.0)进入运行状态。
添加 php5.ini 根本不起作用。但是请参阅GoDaddy:http://support.godaddy.com/help/article/5121/changing-your-hosting-accounts-file-extensions 的这篇文章中的"禁用FastCGI"部分
将这些行添加到.htaccess文件(webroot和网站安装目录):
Options +ExecCGI
addhandler x-httpd-php5-cgi .php
它为我节省了一天!干杯!谢谢龙王!
它对我有用。在 .htaccess 文件之上添加。它将在 godaddy 共享主机帐户上禁用 FastCGI。
选项 +执行CGI
Addhandler X-httpd-php5-CGI .php
禁用PHP-FPM解决了我的问题。
更新
<小时 />我测试了之前的所有评论,但没有解决方案。但我没有放弃。
溶液
取消注释我的 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的。
运行ulimit -n 2048
并重新启动php/php-fpm
我的解决方案是删除我的一个帮助程序中的空格。 该错误列出了涉及的两个页面,一个 CI 会话文件和一个自定义帮助程序。
就我而言,我通过在 LocationMatch 指令中对接规则来修复它
<LocationMatch "^/.">
#your rewrite rules here
</LocationMatch>
/.
匹配任何位置
我在 Apache NOT .htaccess
文件的一个.conf
文件中有重写规则。
我不知道为什么这对我有用,这是我当前的设置
- 阿帕奇版本 2.4
- 菲律宾比索 7.1
- 操作系统 Centos 7
- PHP-FPM
在我的例子中,在 Nginx 配置中给出根元素的正确路径。
将根 D:/fridoon/test/public; 更改为根 D:\fridoon\test\public;解决了这个问题。
然后重新启动 Nginx 和 php。
我在带有中文内容管理框架的窗口中使用Nginx Thinkcmf.com 并在公共目录中删除.user.ini文件,这导致了上述主题错误。