2013-04-21 96 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