.htaccess问题:未指定输入文件

2020/12/11 18:22 · php ·  · 0评论

有人可以帮我弄这个吗?我感觉自己已经将头撞在墙上超过2小时了。

我已经Apache 2.2.8 + PHP 5.2.6安装在我的机器上,.htaccess下面的代码可以正常工作,没有错误。

RewriteEngine on
RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]

我的托管服务提供商服务器上的相同代码给了我404错误代码,并only: No input file specified.在那里输出了index.php。我知道他们已经安装了Apache(在任何地方都找不到版本信息),并且它们正在运行PHP v5.2.8。

我在Windows XP 64-bit,他们正在运行的一些LinuxPHPCGI/FastCGI模式。谁能建议可能是什么问题?

PS。如果那很重要,那是为了CodeIgniter使用友好的URL。


更新1:

mod_rewrite 已安装并继续。

我注意到的是,如果更改RewriteRule/index.php?$1(问号而不是正斜杠),它将陷入无限循环。无论如何,使用问号不是一种选择,因为CodeIgniter(必填)不会以这种方式工作。

当我直接请求index.php时,主页也可以工作: example.com/index.php

我开始认为这可能是apache,认为一旦添加了斜杠,它就不再是文件而是文件夹。如何改变这种行为?


更新2:

我错了。

Apache会正确处理这些URL。


请求
http://example.com/index.php/start/(主页)或任何其他有效地址均可。

似乎
Apache由于某种原因而没有转发查询。


更新3:

只是为了清楚我要达到的目标。

我想这样重写地址:

http://www.example.com/something/ => http://www.example.com/index.php/something/
http://www.example.com/something/else/ => http:// www.example.com/index.php/something/else/

我也很反对这一点。我也在安装Code Igniter。

古怪的不是RewriteBase。这是我的.htaccess:

DirectoryIndex index.php

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)

RewriteRule ^(.*)$ index.php?/$1 [L]

问题

我刚才遇到了类似的问题,不幸的是,该线程中的答案都没有帮助:

Zend Framework发出“未指定输入文件。”,但是:

  • 默认的RewriteBase很好,并且添加RewriteBase /没有帮助
  • 这是一个共享的托管服务器,并且只有FastCGI可用(无法切换到SuPHP)
  • AcceptPathInfo已启用
  • 服务器上的URL重写通常没有问题

因此,答案来自以下站点:https :
//ellislab.com/forums/viewthread/55620/P15 [死链接](即使主机不是DreamHost)。

解决方案

显然,您需要做的就是替换以下行:

RewriteRule ^(.*)$ index.php/$1

有了这个:

RewriteRule ^(.*)$ index.php?/$1

问题解决了。

这为我工作:

 <IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
 </IfModule>

之后index.php,问号很重要!

尝试一下是否更简单RewriteCond就像只重写不存在的文件/文件夹/链接的所有内容一样:

RewriteEngine on

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

RewriteRule ^(.*)$ /index.php/$1 [R,L]

爸爸用户:

  1. 登录您的Go Daddy帐户
  2. 单击您的托管帐户。
  3. 转到设置>文件扩展名管理
  4. 将.php和.php5更改为在PHP5.2X下运行(而不是PHP5.2xFastCGI)

解决了!!!!

mod_rewrite这样做本身就太聪明了,因为它试图弄清楚应该执行哪种重定向。在这种情况下,mod_rewrite您好像要尝试重定向到文件夹,因此它会查找该文件夹而找不到它,因此会出现错误。

编辑:完全清楚地说,我认为您最好的选择是将重写规则更改为:

RewriteRule ^(.*)$ /index.php?$1 [L]

除非有非常特殊的原因使您希望它成为正斜杠。

编辑2:我看到您已经尝试过了。出现无限循环的原因是因为重写条件中包含index.php。如果删除,则应该摆脱无限循环。

此代码将解决此问题。

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

.htaccess用于Live Server:-

DirectoryIndex index.php

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)

RewriteRule ^(.*)$ index.php?/$1 [L]

.htaccess用于Localhost:-

RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1

您的主机管理员很可能已禁用在.htaccess中使用重写功能。他们甚至可能没有安装mod_rewrite。

向他们发送电子邮件并询问

由于这是服务器配置问题,也许您应该在服务器故障时询问

编辑(因为您确定服务器配置正确)

您是否考虑过以$结尾标记RewriteCond?

RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)

(根据我的有限知识)将在URL的开头阻止包含index.php,css,gfx ...的任何URL。因为您在正则表达式的末尾没有$,所以它还会阻止从此继续的所有网址...

www.yourdomain.com/index.php/something不重定向,与www.yourdomain.com/js/something

也许您想添加一个$,这将需要在正则表达式之后立即将URL结束。

RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)$

这是我一次no input file specified采取行动的时候:

这导致它:

RewriteRule ^(.*\.swf)$  redirect_php.php/?a=1 [last]

这更正了它:

RewriteRule ^(.*\.swf)$  redirect_php.php?a=1 [last]

注意/之前的查询?

这似乎确实与AcceptPathInfo有关,后者是关于在文件名之后读取路径的功能:

http://domain.com/file.php/tricky_path/?regular_query_stuff

因为这个问题似乎吸引了很多注意力,所以我想为遇到相同问题但无法在现有答案的帮助下解决的人们提供另一个答案。直到五分钟前,我本人就是其中之一。

总是,我的意思是总是检查您的服务器日志,因为它们可能会向您提供有用的信息。


检查服务器日志(Apache2.4)后,我发现open_basedir引起了麻烦:

mod_fcgid:stderr:PHP警告:未知:open_basedir限制已生效。文件(/data/sites/domain/public/index.php)不在允许的路径内:(/ usr / local / lib / php:/ usr / local / bin:/ data / sites / domain / http -docs)在第0行的Unknown中

mod_fcgid:stderr:PHP警告:未知:无法打开流:0行上的“未知”中不允许进行该操作

在这种情况下,open_basedir无法处理我创建的符号链接,因为它指向open_basedir设置的外部。可以将open_basedir设置扩展到新位置,也可以将所需的文件移动到任何允许的目录的内部。

您可能使用的是Nginx,而不是Apache。错误消息将是相同的。

确定要回显您的服务器数据。

echo $_SERVER["SERVER_SOFTWARE"];

我花了几个小时尝试SO的所有配方,直到找到解决方案:您必须在“ .php”之后添加问号(?),因此重写规则的最后一行如下所示:

RewriteRule ^(.*)$ index.php ? /$1 [L]

没有吗? 在以前的服务器上的CodeIgniter安装程序中,使它使用纯Apache(无Nginx)。而且没有使用端口转发,nginx重新配置或重新安装php-fm的食谱-我在VDS上全部尝试了。

这种简单的方法可以在几秒钟内解决所有问题。

也许您的服务器已AcceptPathInfo禁用,对于正常运行该URL至关重要。尝试启用它:

AcceptPathInfo On

好的,尝试以下规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php(/|$) index.php%{REQUEST_URI} [L]
本文地址:http://php.askforanswer.com/htaccesswentiweizhidingshuruwenjian.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!