重写URL哈希以获取变量

时间:2012-09-25 11:53:32

标签: javascript jquery .htaccess url-rewriting

我正在开发具有动态内容的网站。

单击文章时,它会使用推送状态更改为地址。

示例:

http://www.some-site.com/news/ - 点击新闻项目之前

http://www.some-site.com/news/dynamic-url/ - 点击新闻项目后

但由于pushstate在IE或旧浏览器中不起作用,我已将其重写为使用jQuery.address,因此它只更改了网址中的哈希值。

现在的问题是,有人发送链接到网站给朋友,他们是从Chrome复制的,而他们的朋友使用的是IE,它会开始将新的内容附加到该网址。

示例:

http://www.some-site.com/news/dynamic-url/ - 发送给朋友的网址

http://www.some-site.com/news/dynamic-url/#!/dynamic-url - 朋友访问网站后的网址

所以,我一直坚持如何重写/重定向它们。因为,哈希永远不会被发送到Apache。 我在推特上看过,他们完全按照我的意愿行事,但我无法弄明白。

https://twitter.com/#!/google被重定向到https://twitter.com/google,并且可以在IE中使用。

非常感谢任何帮助,如果您不理解,请让我详细说明。

正如David Thomas所说,这是函数。

var permalink = function(title, id, permalink){
    var current = siteUrl + type + (order ? '/orderBy/' + order : '');
    var newUrl = current + '/' + permalink + '/';
    if(jQuery.browser.msie){
        newUrl = '/' + permalink + '/';
        jQuery.address.value(newUrl);
    }
    else{
        stateNum++;
        window.history.pushState({state: stateNum}, title, newUrl);
    }
    jQuery('title').html('SITE - ' + title);
}

2 个答案:

答案 0 :(得分:0)

您需要做的是使用插件(如jquery历史记录)或自己创建事件来检查哈希更改。然后,你读取哈希(你剥离"!")然后处理哈希你需要什么。您可能希望用它来执行ajax(例如加载域/哈希)并将内容放在页面的某个位置。

这是清楚的吗?

答案 1 :(得分:0)

经过一段时间的思考,我只能找到一个解决方案。

如果有人遇到类似情况,我会在此发布。

我的解决方案,有点hacky。如果浏览器是IE并且在某个点之后有一个url片段,我将其视为新闻项的名称。一旦我有了名字,我就会将它们重定向到合适的网址。

var permalink = function(title, id, permalink){
    var current = siteUrl + type + (order ? '/orderBy/' + order : '');
    var newUrl = '/' + permalink + '/';
    if(jQuery.browser.msie){
        jQuery.address.value(newUrl);
    }
    else{
        current = siteUrl + type + (order ? '/orderBy/' + order : '');
        newUrl = current + '/' + permalink + '/';
        stateNum++;
        window.history.pushState({state: stateNum}, title, newUrl);
    }
    jQuery('title').html('SITE - ' + title);
}
jQuery(document).ready(function(){
    jQuery.address.crawlable(true);
    if(jQuery.browser.msie){
        if(jQuery.address.value() == '/'){
            var currentPermalink = window.location.toString();
            currentPermalink = currentPermalink.split(type);
            if(currentPermalink[1] !== '/'){
                window.location = siteUrl + type + '/#!' + currentPermalink[1];
                jQuery.address.value(newUrl);
            }
        }
    }
});