2011-07-21 56 views
2

我想要一個儘可能快的重定向。所以我決定使用htaccess重定向,因爲它甚至在php解釋器初始化之前就會響應。但我想記錄重定向並將某些內容寫入數據庫。Htaccess:觸發php或寫入日誌

我試圖重定向和調用rewritemap只是爲了觸發一個PHP文件,但它只會引發500錯誤。

我會好的,如果我可以創建一個日誌文件,即使日誌處理將被延遲。重要的只是:快速重定向,跟蹤/記錄重定向。

你有什麼想法或建議嗎?

感謝你在前期

一切順利,

埃姆雷

回答

2

你可以使用RewriteLog登錄改寫動作到一個文件 - 這將被Apache完成,無需調用PHP。

=>非常快;但只記錄到文件,而不是數據庫;如您所說,仍然可以延遲日誌處理,並通過從crontab運行的腳本完成日誌處理。


另請參閱RewriteLogLevel,配置該日誌應該是多麼冗長。

1

能在阿帕奇/虛擬主機配置中使用,但不能在.htaccess(所以如果你可以把它放在那裏,記得要重新加載的Apache):

RewriteEngine On 
    RewriteRule /foo http://www.example.com [R=301,E=redirected] 

    CustomLog /path/to/log combined env=redirected 

'組合拳' 被一個默認的日誌格式,但是你可以使用define your own

+0

+1,這是最好的解決方案,我喜歡只有在應用規則時才登錄環境var的apache日誌。而且肯定是最快的。刪除.htaccess文件的使用將使apache更快,用戶需要快速重定向,使用AllowOverride None刪除.htaccess讀取,並在常規apache文件中使用規則將避免大量運行時IO泄漏給每個目錄的配置文件。 – regilero

1

如果你的目標是儘可能簡單的使用日誌記錄,那麼主要關注點是保持磁盤I/O最小。依靠.htaccess,你在URL的每一級進行目錄掃描(http://muffinresearch.co.uk/archives/2008/04/07/avoiding-the-use-of-htaccess-for-performance /)。

如果您可以在Apache的conf中設置您的RewriteRule,並將您的重定向指向PHP文件,那麼您可以讓PHP運行w/APC並將記錄完成到一個memcache對象。這樣,您的整個客戶端訪問可能純粹發生在快速訪問的內存中,並且您可以有一個定期從memcache中獲取數據並將其推送到數據庫的cron-job(這樣您仍然可以長期存儲但客戶端的訪問不應該要求讀取磁盤)

顯然,如果您對數據庫靈活一點,可以使用Couchbase樣式的解決方案,它基本上可以讓您無需存儲就可以快速寫入memcache在易失性存儲器中的信息,但我猜你已經鎖定了你當前使用的數據庫。