2011-01-07 61 views
3

我一直在使用前端加載器來處理所有請求的項目(路由domain.com/args/go/here到Index.php?req = args /去/這裏),它的工作得很好......或者我應該說,我認爲它 - 我最近添加了一個新的記錄器,並測試它我在index.php中放置了一個測試日誌消息。這條消息被寫入我的日誌文件兩次,每次我重新加載頁面,經過很多調試後,我發現原因是我的.htaccess文件 - 無論出於何種原因,它會爲每個請求加載兩次index.php。正在加載mod_rewrite規則導致index.php加載兩次

這裏是我的.htaccess:

RewriteEngine On 
RewriteBase /site/beta/ #I added this after I discovered the bug 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^index\.php$ #This too. Doesn't work 
RewriteRule ^(.*)$ index.php?args=$1 [L] 

我也試過:

FallbackResource /site/beta/index.php 

哪個都不能正常工作(的index.php只是如果你試圖去不加載,比如說127.0.0.1/site/beta/admin/controls/ - 但是如果你只是去了/index.php),仍然會加載兩次。

有人能幫我嗎?我在IRC度過了幾個小時,沒有人能想出一個有效的解決方案。 (以上兩個是唯一建議的)

回答

6

你完全確定它是一個mod_rewrite錯誤嗎?如果您啓用具有較高rewriteLogLevel(9)的RewriteLog文件,您是否看到相同的請求處理了兩次?

對於我每次看到'同樣的請求做了2次'我想到另一個奇怪的網絡bug:空IMG src的bug

如果你在你的HTML有地方的

<IMG SRC=""> 

或在CSS中的一個(很難找到)答:

url() 

然後你就知道了。 HTTP協議規定,一個空的GET url(以及css中的圖像或url()是GET隱式請求)必須是與原始頁面相同的url的調用(並且它可以是POST您將您的頁面作爲POST請求)。

確實很少有理由讓mod_rewrite對單個請求做出2次響應。檢查Firebug或LiveHTTP請求,你並不總是發送index.php請求2次。或者用手工測試你的服務器的telnet模式HTTP請求,因爲這肯定會發送一個請求。

+0

你真了不起 - 非常感謝。在測試我的頭文件(HTML頭文件)構造函數時發現,我添加了一個測試行來加載一個不存在的JavaScript文件。 – Jon 2011-01-08 02:46:09

0

這也可以是瀏覽器試圖加載(似乎除非你檢查Apache訪問日誌favma.ico)。我有同樣的問題,直到我把我的網站根目錄中。我知道這個問題已經爲最初的提問者解決了,我在這裏爲像我這樣的人尋找同一問題的答案。