404错误但正确的Codeigniter框架中来自JQuery Ajax的响应

This is similar to another issue on SO:

jQuery Ajax returning 404 Error, but correct Response

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.

Here's the deal...I have this Jquery AJAX code:

events: function(start, end, callback) {
    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).

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

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

(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.)

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???).

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:

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: 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).

~ .htaccess in CI www directory? Yes:

<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 !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



PHP-side code (by request):

public function viewEvent()
   $appointmentData['startDate'] = $startDate;
   $appointmentData['startTime'] = $startTime;

   $data = array( 'eventData'=>$appointmentData );

   echo json_encode($data);

Also, Apache log is giving:

[Tue Mar 22 10:45:03 2011] [error] [client] File does not exist: /var/www/calendar/myfeed, referer: http://calendar.localhost/
douzhong3887 在帖子末尾添加了CI代码
9 年多之前 回复
dongxue9997 你能粘贴返回JS对象的CI代码吗?
9 年多之前 回复


已解决:令人尴尬的是,未启用ModRewrite。 我只是通过将垃圾文本放在等效的“if / else”语句中来解决这个问题,该语句是以启用或不启用modrewrite为条件的,而且肯定不是。 我会早些发现这个,除了该网站展示其他行为,让我觉得modrewrite实际上已启用。 唉。</ p>

我希望我的白痴可以帮助别人节省一些时间! :)</ p>
</ div>



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.

I hope my idiocy helps someone save some time in the future!! :)

douzongmu2543 一百万谢谢。
大约一年之前 回复
douhuang1973 和我一样。 在Debian中,Apache2的默认安装附带mod_rewrite,但未加载。 这篇文章帮助了我:xmodulo.com/2013/01 / ...
6 年多之前 回复
dqq22391 同样发生在我身上。 谢谢你的帖子。
大约 8 年之前 回复

这可能不起作用,但值得一试。 在htaccess文件中,尝试从重写规则中删除问号,因此它变为</ p>

  RewriteRule ^(。*)$ index.php / $ 1 [L] 
< / code> </ pre>

我遇到一个问题,我写的应用程序在我的本地计算机上工作正常,但在服务器上保持显示默认控制器,无论如何,并删除问号修复它 。</ p>
</ div>



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

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.

您可以在这里获得完美的解决方案! 问题是最近使用codeigniter进行的更新。 我希望这能节省一两天的人! 快乐的编码!
https://gist.github.com/philipptempel/4226750 </ p >
</ div>



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

dongwu9170 请考虑使用您发布的链接中的信息摘要来增强您的答案。 如果链接后来被删除或过期,您的答案将完全失效。
大约 6 年之前 回复
Csdn user default icon