有人可以帮我弄这个吗? 我感觉就像我一直在打我的头靠在墙上超过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
,他们正在运行一些Linux
使用PHP
的CGI/FastCGI
模式。 任何人都可以提出可能是什么问题呢?
PS。 如果这是重要的这对CodeIgniter
与友好的URL工作。
UPDATE1:
mod_rewrite
安装和。
我已经注意到的是,如果我改变RewriteRule
,以/index.php?$1
(问号代替正斜杠),它进入一个无限循环。 总之,用问号是不是作为一个选项CodeIgniter
(必需)是行不通的这种方式。
当我的index.php直接请求主页也可以工作: example.com/index.php
我开始认为这可能是阿帕奇的思维,一旦尾随斜线添加它不是一个文件了,但一个文件夹。 如何改变这样的行为?
更新2:
我错了。
阿帕奇正确处理这些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/
Answer 1:
我打我的头靠在这一点。 我还安装代码点火器。
该goocher没有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]
Answer 2:
问题
我刚才遇到了类似的问题,遗憾的是没有在这个线程的答案的帮助:
Zend框架是给了“未指定输入文件。”,但是:
- 默认RewriteBase只是罚款,并加入
RewriteBase /
没有帮助 - 这是一个共享的主机服务器,只FastCGI的是可用(没有切换到SuPHP能力)
- 是的AcceptPathInfo上
- 有一个与URL一般重写服务器上没有问题
因此,答案来自于以下站点: https://ellislab.com/forums/viewthread/55620/P15 [死链接(即使主机不是DreamHost的)。
解决方案
显然,所有你需要做的就是替换这一行:
RewriteRule ^(.*)$ index.php/$1
有了这个:
RewriteRule ^(.*)$ index.php?/$1
问题解决了。
Answer 3:
这为我工作:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
之后index.php
,问号是很重要的!
Answer 4:
尝试,如果它与一个简单的工作RewriteCond
; 像一个仅重写不是现有的文件/文件夹/链接的一切:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ /index.php/$1 [R,L]
Answer 5:
去爸爸的用户:
- 登录到您的Go Daddy帐户
- 点击您的托管帐户。
- 进入设置>文件扩展名管理
- 改变.php然后.php5 PHP5.2X(而不是PHP5.2xFastCGI)下运行
解决了!!!!
Answer 6:
mod_rewrite
是为自己好一点太聪明,因为它试图找出什么样的重定向它应该做的事。 在这种情况下,它看起来mod_rewrite
像你想重定向到一个文件夹中,因此它查找该文件夹并不能找到它,因此错误。
编辑:只是要非常清楚,我认为最好的办法是改变你的重写规则:
RewriteRule ^(.*)$ /index.php?$1 [L]
除非你为什么要一个非常speciic原因,它是一个正斜杠。
编辑2:我看到你已经尝试过这一点。 你得到一个无限循环的原因是因为你在重写条件具备的index.php。 如果您删除您应该是自由的无限循环。
Answer 7:
为的.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]
的.htaccess本地主机: -
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1
Answer 8:
这极有可能是您的主机的管理员已禁用在.htaccess中使用重写的能力。 他们甚至可能没有安装的mod_rewrite。
把它们的电子邮件,并要求
由于这是一个服务器的配置问题,或许你应该问在服务器故障
编辑(因为你是确保服务器配置正确)
你有没有考虑过用线$的结束标记您的RewriteCond?
RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)
将(基于我有限的知识)块包含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)$
Answer 9:
这是一次我抓到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
Answer 10:
因为这个问题似乎吸引了大量的关注,我想提出另一个答案有遇到相同问题的人,并不能与现有的答案的帮助来解决它。 我自己是那些人,直到五分钟前的一个。
一直以来,我的意思是经常检查你的服务器日志,因为他们可能会提供有用的信息给你。
检查我的服务器日志(Apache2.4)后,我发现的open_basedir造成的麻烦:
mod_fcgid:标准错误:PHP的警告:未知:有效open_basedir的限制。 文件(/data/sites/domain/public/index.php)是不是在允许的路径(S)内:(在/ usr / local / lib目录/ PHP:在/ usr / local / bin目录:/数据/网站/域/ HTTP -docs)中的线0未知
mod_fcgid:标准错误:PHP的警告:未知:未能打开流:操作未知不允许上线0
在这种情况下,open_basedir的处理不了我创建,因为它指向的的open_basedir设置之外的符号链接。 无论是扩大的open_basedir设置也到新的位置或将所需的文件移动到任何允许目录内..
Answer 11:
您可能正在使用Nginx的,而不是一个Apache。 该错误消息将是相同的。
回声出你的服务器的数据是肯定的。
echo $_SERVER["SERVER_SOFTWARE"];
Answer 12:
也许您的服务器AcceptPathInfo
残疾人是必不可少的那种URL的正常工作。 试着启用它:
AcceptPathInfo On
好吧,试试这个规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php(/|$) index.php%{REQUEST_URI} [L]
文章来源: .htaccess issues: No input file specified