2013-08-17 82 views
1

嗨我有一個非常奇怪的問題與Wordpress 3.5 Varnish 3.02和Ubuntu的可視化編輯器已經消失。在html/visual之間切換的按鈕已經消失,只有html編輯器正在顯示。該網站緩存很好,沒有JavaScript錯誤,並沒有在Apache日誌中的錯誤。 Varnish正在80和8080上聽Apache。除編輯器外,其他所有工作都很好。 當我繞過清漆編輯開關按鈕出現並工作正常。以下是我迄今所做的沒有成功: - 禁用 所有的插件 - 切換到默認主題 - 經過螢火蟲任何jQuery的錯誤(NONE) - 旁路光油(一切正常) - 吹掃光油緩存(沒有運氣) - 重新上傳所有默認的wordpress文件 - 切換到Wordpress的早期版本(3.5) 您認爲可能是什麼問題?在這個問題上,我一直在摸索着一個星期。與wordpress的光油打破了WordPress的可視化編輯器?

VCL FILE

backend default { 
    .host = "x.x.x.x"; 
    .port = "8080"; 
} 


sub vcl_recv { 

    if (req.http.host ~ "mydomain.com") { 
    set req.http.x-Redir-Url = "http://www.anotherdomain.com/specific_folder/"; 
    error 750 req.http.x-Redir-Url; 
    } 

} 

include "devicedetect.vcl"; 

# Called after a document has been successfully retrieved from the backend. 
sub vcl_recv { 
    call devicedetect; 


    # Allow the back-end to serve up stale content if it is responding slowly. 
    set req.grace = 2m; 

    # Always cache the following file types for all users. 
    if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$") { 
      unset req.http.cookie; 
    } 

    # Don't serve cached pages to logged in users 
    if (req.http.cookie ~ "wordpress_logged_in" || req.url ~ "vaultpress=true") { 
      return(pass); 
    } 

    # Drop any cookies sent to WordPress. 
    if (! (req.url ~ "wp-(login|admin)")) { 
      unset req.http.cookie; 
    } 

    # Handle compression correctly. Different browsers send different 
    # "Accept-Encoding" headers, even though they mostly all support the same 
    # compression mechanisms. By consolidating these compression headers into 
    # a consistent format, we can reduce the size of the cache and get more hits. 
    # @see: http://varnish.projects.linpro.no/wiki/FAQ/Compression 
    if (req.http.Accept-Encoding) { 

      if (req.http.Accept-Encoding ~ "gzip") { 
        # If the browser supports it, we'll use gzip. 
        set req.http.Accept-Encoding = "gzip"; 
      } 

      else if (req.http.Accept-Encoding ~ "deflate") { 
        # Next, try deflate if it is supported. 
        sset req.http.Accept-Encoding = "deflate"; 
      } 
      else { 
        # Unknown algorithm. Remove it and send unencoded. 
        unset req.http.Accept-Encoding; 
      } 

    } 

} 

# MOBILE AND UA DETECTION - override the header before it is sent to the backend 
sub vcl_miss { if (req.http.X-UA-Device) { set bereq.http.User-Agent = req.http.X-UA-Device; } } 
sub vcl_pass { if (req.http.X-UA-Device) { set bereq.http.User-Agent = req.http.X-UA-Device; } } 


sub vcl_fetch { 
    #SET UA BEFORE SENDING TO BACKEND 
    if (req.http.X-UA-Device) { 
      if (!beresp.http.Vary) { # no Vary at all 
        set beresp.http.Vary = "X-UA-Device"; 
      } elseif (beresp.http.Vary !~ "X-UA-Device") { # add to existing Vary 
        set beresp.http.Vary = beresp.http.Vary + ", X-UA-Device"; 
      } 
    } 
    set beresp.http.X-UA-Device = req.http.X-UA-Device; 



    #Fix Login under wordpress 
    if (beresp.http.set-cookie ~ "sessionid" || beresp.http.set-cookie ~ "csrftoken") { 
    #  return (pass); 
    } else { 
      return (deliver); 
    } 

    set beresp.ttl = 20m; 

    # Allow items to be stale if needed. 
    set beresp.grace = 2m; 

    # Drop any cookies WordPress tries to send back to the client. 
    if (! req.url ~ "wp-(login|admin)" && ! req.http.cookie ~ "wordpress_logged_in") { 
      unset beresp.http.set-cookie; 
    } 

} 

sub vcl_error { 
#REDIRECTION 
    if (obj.status == 750) { 
      set obj.http.Location = obj.response; 
      set obj.status = 301; 
      return (deliver); 
    } 

set obj.http.Content-Type = "text/html; charset=utf-8"; 
set obj.http.Retry-After = "5"; 
synthetic {" 
    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html> 
    <head> 
    <title>OOPS UNE ERREUR S'EST PRODUITE</title> 
    <style src="css/style.css"></style> 
    </head> 
    <body> 
    <h1>Oh! Oh! Nos excuses. Une erreure s'est produite. On s'en occupe.</h1> 
    </body> 
    </html> 
"}; 
    return (deliver); 
} 

sub vcl_deliver { 
    if ((req.http.X-UA-Device) && (resp.http.Vary)) { 
    set resp.http.Vary = regsub(resp.http.Vary, "X-UA-Device", "User-Agent"); 
    } 
} 


**************THIS IS ANOTHER FILE(devicedetect.vcl)********************** 

INCLUDED DEVICE DETECTION: 

# 
# detectdevice.vcl - regex based device detection for Varnish 
# http://github.com/varnish/varnish-devicedetect/ 
# 
# Author: Lasse Karstensen <[email protected]> 

sub devicedetect { 
    unset req.http.X-UA-Device; 
    set req.http.X-UA-Device = "pc"; 

    # Handle that a cookie may override the detection alltogether. 
    if (req.http.Cookie ~ "(?i)X-UA-Device-force") { 
      /* ;?? means zero or one ;, non-greedy to match the first. */ 
      set req.http.X-UA-Device = regsub(req.http.Cookie, "(?i).*X-UA-Device-force=([^;]+);??.*", "\1"); 
      /* Clean up our mess in the cookie header */ 
      set req.http.Cookie = regsuball(req.http.Cookie, "(^|;) *X-UA-Device-force=[^;]+;? *", "\1"); 
      /* If the cookie header is now empty, or just whitespace, unset it. */ 
      if (req.http.Cookie ~ "^ *$") { unset req.http.Cookie; } 
    } else { 
      if (req.http.User-Agent ~ "(?i)(ads|google|bing|msn|yandex|baidu|ro|career|)bot" || 
       req.http.User-Agent ~ "(?i)(baidu|jike|symantec)spider" || 
       req.http.User-Agent ~ "(?i)scanner" || 
       req.http.User-Agent ~ "(?i)(web)crawler") { 
        set req.http.X-UA-Device = "bot"; } 
      elsif (req.http.User-Agent ~ "(?i)ipad")  { set req.http.X-UA-Device = "tablet-ipad"; } 
      elsif (req.http.User-Agent ~ "(?i)ip(hone|od)") { set req.http.X-UA-Device = "mobile-iphone"; } 
      /* how do we differ between an android phone and an android tablet? 
       http://stackoverflow.com/questions/5341637/how-do-detect-android-tablets-in-general-useragent */ 
      elsif (req.http.User-Agent ~ "(?i)android.*(mobile|mini)") { set req.http.X-UA-Device = "mobile-android"; } 
      // android 3/honeycomb was just about tablet-only, and any phones will probably handle a bigger page layout. 
      elsif (req.http.User-Agent ~ "(?i)android 3")    { set req.http.X-UA-Device = "tablet-android"; } 
      // May very well give false positives towards android tablets. Suggestions welcome. 
      elsif (req.http.User-Agent ~ "(?i)android")   { set req.http.X-UA-Device = "tablet-android"; } 
      elsif (req.http.User-Agent ~ "Mobile.+Firefox")  { set req.http.X-UA-Device = "mobile-firefoxos"; } 
      elsif (req.http.User-Agent ~ "^HTC" || 
       req.http.User-Agent ~ "Fennec" || 
       req.http.User-Agent ~ "IEMobile" || 
       req.http.User-Agent ~ "BlackBerry" || 
       req.http.User-Agent ~ "SymbianOS.*AppleWebKit" || 
       req.http.User-Agent ~ "Opera Mobi") { 
        set req.http.X-UA-Device = "mobile-smartphone"; 
      } 
      elsif (req.http.User-Agent ~ "(?i)symbian" || 
       req.http.User-Agent ~ "(?i)^sonyericsson" || 
       req.http.User-Agent ~ "(?i)^nokia" || 
       req.http.User-Agent ~ "(?i)^samsung" || 
       req.http.User-Agent ~ "(?i)^lg" || 
       req.http.User-Agent ~ "(?i)bada" || 
       req.http.User-Agent ~ "(?i)blazer" || 
       req.http.User-Agent ~ "(?i)cellphone" || 
       req.http.User-Agent ~ "(?i)iemobile" || 
       req.http.User-Agent ~ "(?i)midp-2.0" || 
       req.http.User-Agent ~ "(?i)u990" || 
       req.http.User-Agent ~ "(?i)netfront" || 
       req.http.User-Agent ~ "(?i)opera mini" || 
       req.http.User-Agent ~ "(?i)palm" || 
       req.http.User-Agent ~ "(?i)nintendo wii" || 
       req.http.User-Agent ~ "(?i)playstation portable" || 
       req.http.User-Agent ~ "(?i)portalmmm" || 
       req.http.User-Agent ~ "(?i)proxinet" || 
       req.http.User-Agent ~ "(?i)sonyericsson" || 
       req.http.User-Agent ~ "(?i)symbian" || 
       req.http.User-Agent ~ "(?i)windows\ ?ce" || 
       req.http.User-Agent ~ "(?i)winwap" || 
       req.http.User-Agent ~ "(?i)eudoraweb" || 
       req.http.User-Agent ~ "(?i)htc" || 
       req.http.User-Agent ~ "(?i)240x320" || 
       req.http.User-Agent ~ "(?i)avantgo") { 
        set req.http.X-UA-Device = "mobile-generic"; 
      } 
    } 

}

+0

我自己也嘗試緊迫,取消勾選用戶>>公司簡介>>可視化編輯器。 – Chefou

+0

我已經將連接腳本和調試腳本選項添加到wp-config中,但沒有成功。 – Chefou

+0

我也嘗試了不同的瀏覽器,個人電腦和清除瀏覽器緩存和餅乾。 – Chefou

回答

2

是它發生不論是會員或沒有。

問題出在vcl_recv中調用devicedetect。我在第一個處理devicedetect例程後創建了一個新的vcl_recv。這不知怎的解決了這個問題。

謝謝

2

我已經偶然發現了這個問題,同時遇到同樣的問題。我試圖按照提問者在後續「回覆」中提出的建議,但我運氣不佳。

問題中描述的問題源於Wordpress僅在用戶代理匹配已知類型時啓用TinyMCE(可視化)編輯器的事實。對於其他一切,它會默認禁用它。結合devicedetect.vcl,你大概可以看到這是怎麼回事...

因此,因爲我們發送「pc」,「移動平臺」等到後端(Wordpress),它永遠不會真正知道瀏覽器您正在使用。

在我的VCL我禁用/可溼性粉劑管理員緩存完全用下面的代碼:

if (req.url ~ "/wp-(login|admin)") { 
    return (pass); 
} 

當我實現devicedetect.vcl我在我的sub vcl_recv頂部調用程序,因此用戶代理是已經以修改的狀態到達我的後端。

的解決方案是return (pass)/wp-(login|admin)之前call devicedetect,像這樣:

if (req.url ~ "/wp-(login|admin)") { 
    return (pass); 
} 
call devicedetect; 
相關問題