2009-11-01 65 views
1

我有一個代理腳本,它寫了非常醜陋的長URL。代理腳本automaticaly重寫長的難看網址所有HREF鏈接,網址重寫減慢代理很多

mysite.com/proxy.php?url=somesite.com 
mysite.com/proxy.php?url=somesite.com/somedir 
mysite.com/proxy.php?url=somesite.com/somedir/somepage.php 

解決這個問題我已經做了兩件事情

  1. 編輯代理腳本,讓所有 HREF鏈接改寫爲

    mysite.com/somesite.com 
    
  2. 加在.htaccess重寫規則,使短 的URL重寫現在...

    mysite.com/somesite.com

    的RewriteCond%{} REQUEST_FILENAME!-f

    的RewriteCond% {REQUEST_FILENAME}!-d

    重寫規則^(。*)$ proxy.php?URL 1 = $ [L,QSA]

問題是,每當我點擊一個代理加載頁面上的鏈接時,它似乎比以前花費了很多時間做了所有這些整容工作。我的重寫規則有問題嗎?

回答

3

你寫的測試做了兩個文件測試(如果'not-file'和'not-dir'),如果它們是真的,它會執行你的RewriteRule。這項測試是針對請求完成的。即使結果本來只需要HTTP 304(未修改)響應,或者實際文件當前由Apache保存在內存中。

如果它包含許多(服務器/客戶端緩​​存的)圖像或其他資源,可能會顯着減慢您的網站。爲防止出現這種情況,請嘗試過濾而不需要訪問文件系統。使用正則表達式儘可能地過濾。最簡單的方法是將URI路徑部分更改爲獨特的,例如example.com/u=somesite.com甚至example.com/p/somesite.com(p代表代理))。

你的測試會快很多,如果你需要做的是不是兩個文件存在測試(例如用於example.com/p/somesite/etc/....)正則表達式模式匹配:

RewriteCond %{REQUEST_URI} ^/p/ 
RewriteRule .... 

更新:擴展位並添加了小例子

PS:即使您不想更改當前的簡短URI方案,也可以暫時使用此模式來測試它是否會改善性能。