2013-04-21 97 views
1

我有一個Apache編寫器,除了使用'tabs'的頁面外,其他地方都可以使用。jQueryUI的.tabs與Apache Rewrite發生衝突

由於某些原因,這些標籤頁正在加載,就好像它們是通過AJAX加載的完整頁面一樣(通過重寫指令運行index.php - 但它不應該重寫#anchor鏈接,我認爲... )

有沒有辦法阻止它這樣做?這很奇怪,因爲不僅將#鏈接視爲真實網址,而且還通過內聯樣式<html><html>添加-33,000px,所以這就是我在檢查工具中禁用它之後的樣子。否則,它只是黑色和非常長。

enter image description here

我要補充,這是不是一個問題,直到我說<base href="/folder/">解決的問題與它沒有正確重寫子目錄。之前,它還是正確地重寫和渲染了頁面。

更新 這絕對是一個<base>和jQueryUI的的.tabs衝突。當我刪除重寫並使用長URL時,它會不斷克隆它們。重寫將它從重寫過去保存了12次左右。

+0

在您的.htaccess中,檢查片段的'RewriteCond'只會在'/ folder /'之後立即失敗。例如,www.example.com/folder/file.php#hello與條件不符,但www.example.com/folder/#hello會。如果您不希望重寫發生在涉及/ folder /的任何請求上,您可能需要'RewriteCond%{REQUEST_URI}!/文件夾/.*(#(.*))$' – 2013-04-21 17:58:25

+0

替換代碼,但它仍然是瘋了。它足夠奇怪地工作在IE中。重寫使其成爲'/ folder /#tab',儘管這不是物理路徑。 – 2013-04-21 18:08:18

回答

1

感謝this錯誤報告我找到了解決方案。

$.fn.__tabs = $.fn.tabs; 
$.fn.tabs = function (a, b, c, d, e, f) { 
    var base = location.href.replace(/#.*$/, ''); 
    $('ul>li>a[href^="#"]', this).each(function() { 
     var href = $(this).attr('href'); 
     $(this).attr('href', base + href); 
    }); 
    $(this).__tabs(a, b, c, d, e, f); 
}; 

    //$('#the-object').tabs(); 

顯然在1.8它工作,在1.9它變得糟糕。這將基礎href添加到鏈接,解決了問題。

1

mod_rewrite也看片段標識符,但你可以告訴它不要在RewriteCond

以下僅允許不以分段標識符結尾的URI。

RewriteCond %{REQUEST_URI} !(#(.*))$ 
+0

這是一個好主意,但它不起作用:/ – 2013-04-21 17:04:35

+0

這實際上更像是一個'mod_rewrite'問題,而不是一個jQuery問題。你可以在你的問題中添加.htaccess的相關部分嗎? – 2013-04-21 17:22:51

+0

添加了相關代碼。根據重寫日誌,我不能說它正在重寫#鏈接。 – 2013-04-21 17:48:11

0

顯然,這部分是由於在jQueryUI的選項卡中的錯誤

The Bug Report

我不知道我可以換我的頭解決這個問題,但它是工作在IE瀏覽器,而不是在Chrome/Firefox ...猜猜我會嘗試一個插件。

+0

這是一個虛假的bug報告。它在4年前開放,因爲它沒有任何意義而被放棄。 – 2013-04-21 18:14:02

+0

的確如此,但它與這個問題非常相似。由於某種原因,它現在加載的頁面沒有-33000px頁邊距,但仍然會製作3個以上的標籤頁副本。 – 2013-04-21 18:28:57

+0

另一個'notabug'報告''和'.tabs'發生衝突。 http://bugs.jqueryui.com/ticket/8637 – 2013-04-26 17:13:34