This is similar to another issue on SO:
这类似于SO上的另一个问题:
jQuery Ajax returning 404 Error, but correct Response
jQuery Ajax返回404错误,但正确响应
but the above is very wordpress-specific. Also, my gut feeling is that my problem has more to do with my Apacher server setup, but I'm somewhat of a newbie at that.
但上面的内容非常类似于wordpress。另外,我的直觉是我的问题与我的Apacher服务器设置有关,但我有点像新手。
Here's the deal...I have this Jquery AJAX code:
这是交易...我有这个Jquery AJAX代码:
events: function(start, end, callback) {
$.ajax({
type: "POST",
// This Works -->
url: 'http://calendar.localhost/index.php/myfeed/',
// This Fails -->
//url: 'http://calendar.localhost/myfeed/',
dataType: 'json',
cache: false,
data: {
appointment_id: _appointmentId
},
success: function(d) {.... },
error: function(x,s,e) {... }
});
When I use the url with index.php, everything works fine. However when I use the one without index.php, I get a 404 error, even though the (json) data seeems to be coming back ok (see below).
当我使用带有index.php的url时,一切正常。但是当我使用没有index.php的那个时,我得到404错误,即使(json)数据看起来好了(见下文)。
Also, this is happening on a new system I recently upgraded to : Debian 2.6.32 (amd64) PHP 5.3.3 Apache 2.2.16
此外,这发生在我最近升级到的新系统上:Debian 2.6.32(amd64)PHP 5.3.3 Apache 2.2.16
The same code (ie /myfeed or without index.php) works on my old system: Fedora 8 (yes, 8 lol) PHP 5.2.x Apache 2.2.6
相同的代码(即/ myfeed或没有index.php)适用于我的旧系统:Fedora 8(是的,8 lol)PHP 5.2.x Apache 2.2.6
(Note, initially I was using '/myfeed' for the url param which worked find on my "old" system. Any solution where I don't have to hardcode the domains would be acceptable to me.)
(注意,最初我使用'/ myfeed'作为在我的“旧”系统上找到的url param。我不需要对域进行硬编码的任何解决方案都可以接受。)
So either I'm hitting some difference in one of these 3 (ie, the change in php, apache, or linux versions), or there's something I need to modify in my new Apache setup (my guess is something with the root dir '/' for virtual hosts, which I'm using for this site on my localhost...perhaps it's thinking the response is from a different domain, but I don't see how that could be if it works with index.php but fails without it???).
所以要么我在这三个中的一个(即php,apache或linux版本的变化)中有所不同,或者我需要在我的新Apache设置中修改一些东西(我的猜测是根目录' /'对于虚拟主机,我在我的本地主机上使用这个站点...也许它认为响应是来自不同的域,但我不知道如果它与index.php一起使用但是失败了没有它???)。
If anyone has a solution or ideas for me to try that would be greatly appreciated!!!!
如果有人有一个解决方案或想法让我尝试,将非常感谢!!!!
Here are details from Firebug for the non-working case:
以下是Firebug针对非工作案例的详细信息:
POST http://calendar.localhost/myfeed 404 Not Found
POST http://calendar.localhost/myfeed 404 Not Found
Headers tab:
Response Headersview source
Date Tue, 22 Mar 2011 06:22:37 GMT
Server Apache/2.2.16 (Debian)
X-Powered-By PHP/5.3.3-7+squeeze1
Vary Accept-Encoding
Content-Encoding gzip
Content-Length 220
Keep-Alive timeout=15, max=90
Connection Keep-Alive
Content-Type text/html
Request Headersview source
Host calendar.localhost
User-Agent Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20110302 Iceweasel/3.5.16 (like Firefox/3.5.16)
Accept application/json, text/javascript, */*; q=0.01
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Content-Type application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With XMLHttpRequest
Referer http://calendar.localhost/index.php/client
Content-Length 36
Response tab:
{"eventArray":[{"id":"2","notes":"test client Thurs","start":1299951000000,"end":1299960900000},{"id":"3","notes":"test bb334343","start":1300064400000,"end":1300068000000},{"id":"5","notes":"New appt dafdaf","start":1300462200000,"end":1300465800000}, {"id":"35","notes":"japan2","start":1300539600000,"end":1300545000000},{"id":"47","notes":"helo customer test","start":1300471200000,"end":1300475700000},{"id":"50","notes":"test 2 x email","start":1300455000000,"end":1300455900000}]}
Also :
~ mod_rewrite enabled? Yes, I belive so (my CI pages redirect as they should).
~mod_rewrite启用了吗?是的,我相信(我的CI页面重定向)。
~ .htaccess in CI www directory? Yes:
在CI www目录中的〜.htaccess?是:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin
ErrorDocument 404 /index.php
</IfModule>
Thanks,
Peter
PHP-side code (by request):
PHP端代码(按要求):
public function viewEvent()
{
...
$appointmentData['startDate'] = $startDate;
$appointmentData['startTime'] = $startTime;
$data = array( 'eventData'=>$appointmentData );
echo json_encode($data);
}
Also, Apache log is giving:
此外,Apache日志提供:
[Tue Mar 22 10:45:03 2011] [error] [client 127.0.0.1] File does not exist: /var/www/calendar/myfeed, referer: http://calendar.localhost/
3 个解决方案
#1
9
Resolved: embarrassingly, ModRewrite was not enabled. I only figured this out by putting garbage text inside the equivalent of an "if/else" statement conditioned on modrewrite being enabled or not, and sure enough it wasn't. I would have found this earlier except the site was exhibiting other behavior that made me think modrewrite was actually enabled. ugh.
解决:令人尴尬的是,ModRewrite未启用。我只是通过将垃圾文本放在相应的“if / else”语句中来解决这个问题,该语句是以启用或不启用modrewrite为条件的,而且肯定不是。我会早些发现这个,除了该网站展示的其他行为让我觉得modrewrite实际上是启用的。啊。
I hope my idiocy helps someone save some time in the future!! :)
我希望我的白痴可以帮助别人节省一些时间! :)
#2
0
This probably won't work, but it's worth a shot. In the htaccess file, try removing the question mark from the rewrite rule, so it becomes
这可能不会起作用,但值得一试。在htaccess文件中,尝试从重写规则中删除问号,使其成为
RewriteRule ^(.*)$ index.php/$1 [L]
I had a problem where an app I wrote worked fine on my local machine, but on server kept on displaying the default controller no matter what, and removing the question mark fixed it.
我有一个问题,我写的应用程序在我的本地机器上工作正常,但在服务器上保持显示默认控制器,无论如何,并删除问号修复它。
#3
0
You can get a perfect solution here! The problem is the recent updates with codeigniter. I hope this saves someone a day or two! Happy coding! https://gist.github.com/philipptempel/4226750
您可以在这里获得完美的解决方案!问题是最近使用codeigniter进行的更新。我希望这能节省一两天的人!快乐的编码! https://gist.github.com/philipptempel/4226750
#1
9
Resolved: embarrassingly, ModRewrite was not enabled. I only figured this out by putting garbage text inside the equivalent of an "if/else" statement conditioned on modrewrite being enabled or not, and sure enough it wasn't. I would have found this earlier except the site was exhibiting other behavior that made me think modrewrite was actually enabled. ugh.
解决:令人尴尬的是,ModRewrite未启用。我只是通过将垃圾文本放在相应的“if / else”语句中来解决这个问题,该语句是以启用或不启用modrewrite为条件的,而且肯定不是。我会早些发现这个,除了该网站展示的其他行为让我觉得modrewrite实际上是启用的。啊。
I hope my idiocy helps someone save some time in the future!! :)
我希望我的白痴可以帮助别人节省一些时间! :)
#2
0
This probably won't work, but it's worth a shot. In the htaccess file, try removing the question mark from the rewrite rule, so it becomes
这可能不会起作用,但值得一试。在htaccess文件中,尝试从重写规则中删除问号,使其成为
RewriteRule ^(.*)$ index.php/$1 [L]
I had a problem where an app I wrote worked fine on my local machine, but on server kept on displaying the default controller no matter what, and removing the question mark fixed it.
我有一个问题,我写的应用程序在我的本地机器上工作正常,但在服务器上保持显示默认控制器,无论如何,并删除问号修复它。
#3
0
You can get a perfect solution here! The problem is the recent updates with codeigniter. I hope this saves someone a day or two! Happy coding! https://gist.github.com/philipptempel/4226750
您可以在这里获得完美的解决方案!问题是最近使用codeigniter进行的更新。我希望这能节省一两天的人!快乐的编码! https://gist.github.com/philipptempel/4226750