【问题标题】:Apache 500 error, rewrite engine & ajaxApache 500 错误,重写引擎和 ajax
【发布时间】:2010-11-10 20:18:18
【问题描述】:

我一直在努力设置重写规则,这样我就可以拥有更短更好的 URL,并且我有一个非常 ajaxy 的网站。

我已经在服务器上运行了重写规则,并且页面加载了漂亮的新 url,但似乎所有 ajax 现在都被破坏了。 Firefox 告诉我这是一个 500 错误。

尝试直接加载页面,我没有收到“500 错误”页面,但它确实返回了“3738”,尽管我不知道这意味着什么。

所以我检查了apache日志,果然

GET /processes/format.php?output=queries HTTP/1.1" 500 33

问题是,我不知道为什么会损坏。该页面存在,所以我猜这是重写网址的问题?

我的重写规则是这样的

重写引擎开启 RewriteCond %{REQUEST_URI} !\.(php|html|css|js|gif|png|jpe?g)$ 重写规则 (.*)$ /index.php [L]

-----------------已编辑 1----------------- 所以我得到了错误日志,看起来错误是在重写器中无法识别

 使用请求的 uri /processes/format.php 初始化重写引擎
将模式 '(.*)$' 应用于 uri '/processes/format.php'
 RewriteCond: input='/processes/format.php' pattern='!.(php|html|css|js|gif|png|jpe?g)$' => 不匹配通过/processes/format.php 

所以我认为这是重写规则的错误,因为 !.php 应该已经匹配,除非我读错了日志。

----------------编辑 2 ------------------ 看起来这可能是一个 2 部分错误。 第 1 部分 javascript 正在加载 500 错误 第 2 部分页面没有输出内容。 我在页面中添加了一些回声,并且 URL 是可检索的。不知道 3738 是从哪里来的。

【问题讨论】:

  • 既然日志说“不匹配=>通过”,说明重写规则不会被应用,因此很可能不是重写导致错误。

标签: apache mod-rewrite


【解决方案1】:

一些可能帮助您解决错误的步骤:

  • 你试过不使用js的format.php页面吗?
  • 尝试在重写时打开更详细的调试:

    重写日志 /var/log/apache2/rewrite.log

    重写日志级别 9

RewriteLogLevel 9 非常冗长,不能在生产中使用

更多关于重写日志的信息:http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteLog

【讨论】:

  • 是的,我确实尝试在没有 JS 的情况下获取页面(抱歉,我编辑了我的条目并以某种方式删除了它,我会把它放回去。
  • 我已打开该日志文件并将输出放入上面的第一条评论中。
【解决方案2】:

疯了!!! 仍然不确定这是如何/为什么在我的测试服务器上发生的,并且非常关心它将如何进展,但代码现在可以在 prod & test 上运行。

我认为 500 错误非常具有误导性。没有错误,但页面没有返回应有的内容。

这就是发生的事情。

我试图获取的链接是 format.php?output=queries

现在,使用 PHP,我应该得到变量 $_GET['output'],但我使用相同的页面作为包含,所以我使用这个

如果(!isset($输出)){ $输出=@$_GET['输出']; }

由于某种原因,在我的测试服务器上设置了输出,即使在新窗口中检索页面时也是如此。这怎么可能?只是在URL里,PHP怎么知道怎么赋值呢?

无论如何,我知道使用 format.php 的页面有一个我不会在其他任何地方使用的变量,所以我现在检查该变量。 问题已解决。

一旦我这样做了,页面就会加载,而 firebug 什么也没有显示。 现在的问题是,为什么 Firebug 将一个近乎空白的页面解释为 500 错误?

【讨论】:

猜你喜欢
  • 2012-11-07
  • 2012-11-30
  • 2023-03-31
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多