2009-07-14 93 views
0

我一直在努力通過設置重寫規則,所以我可以有更短,更好的URL,我有一個非常ajaxy網站。Apache 500錯誤,重寫引擎和AJAX

我已經有了重寫規則在服務器上工作,並且頁面加載了漂亮的新網址,但是現在所有的ajax現在都被破壞了。 Firefox告訴我它有一個500錯誤。

試圖直接加載頁面,我沒有得到'500錯誤'頁面,但它確實返回'3738',但我不知道這意味着什麼。

所以我檢查apache的日誌,果然

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

的問題是,我不知道這是爲什麼壞了。該頁面存在,所以我猜這是重寫url的問題?

我重寫規則是這樣的

 
RewriteEngine On 
    RewriteCond %{REQUEST_URI} !\.(php|html|css|js|gif|png|jpe?g)$ 
    RewriteRule (.*)$ /index.php [L] 

-----------------編輯1 -------------- ---- 所以我得到了錯誤日誌,它看起來像錯誤在重寫過程中不能識別

 init rewrite engine with requested uri /processes/format.php 
applying pattern '(.*)$' to uri '/processes/format.php' 
RewriteCond: input='/processes/format.php' pattern='!.(php|html|css|js|gif|png|jpe?g)$' => not-matched pass through /processes/format.php

所以我在想這是一個錯誤,重寫規則,作爲!.php應該已經匹配了,除非我正在讀取日誌錯誤。

----------------編輯2 ------------------ 看起來像這可能是2部分錯誤。 第1部分javascript正在加載500錯誤 第2部分頁面未輸出內容。 我已經在頁面中引入了幾個echo,並且URL是可檢索的。不知道3738是從哪裏來的。

+0

由於日誌中顯示「not matched => passed through」,這意味着重寫規則不會被應用,因此可能不會導致錯誤的重寫。 – Torandi 2009-07-15 15:59:43

回答

2

一些步驟,可以幫助您固定的錯誤:

  • 您是否嘗試過的format.php頁面,而無需使用JS?
  • 嘗試打開更詳細的調試上重寫:

    RewriteLog /var/log/apache2/rewrite.log

    RewriteLogLevel 9

RewriteLogLevel 9是非常冗長,不用於生產

有關更多信息rewritelog:http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteLog

+0

是的,我確實試圖找到沒有JS的頁面(對不起,我編輯了我的條目,並以某種方式刪除了這個,我將它放回去了) – pedalpete 2009-07-14 23:40:07

+0

我已經打開該日誌文件並將輸出放到上面的第一條註釋中 – pedalpete 2009-07-15 02:03:36

0

瘋狂! 仍然不知道我的測試服務器上如何/爲什麼會發生這種情況,並非常擔心它會如何進展,但代碼現在可用於生成&測試。

我認爲500錯誤是非常誤導。沒有錯誤,但該頁面沒有返回它應該具有的內容。

這是發生了什麼事。

我試圖得到的鏈接是format.php?輸出=查詢

現在,使用PHP,我應該得到的變量$ _GET [「輸出」],但是我用的是相同的頁面作爲包括,所以我用這個

 
if(!isset($output)){ 
[email protected]$_GET['output']; 
} 

對於一些我的測試服務器輸出的原因正在設置,即使在新窗口中檢索頁面時也是如此。這怎麼可能?它只在URL中,PHP如何知道如何分配它?

無論如何,我知道使用format.php的頁面有一個變量,我沒有在其他地方使用,所以我現在檢查該變量。 問題修復。

一旦我這樣做,頁面加載,並且螢火蟲什麼也沒有顯示。 現在的問題是,爲什麼Firebug將一個接近空白的頁面解釋爲500錯誤?