apache将所有哈希标记重写为一个目录下的斜杠标记

时间:2013-11-20 14:00:45

标签: apache rewrite

如何在一个目录下将所有哈希标记重写为斜杠标记? (阿帕奇)

http://www.domain.com/company/index#about => http://www.domain.com/company/index/about http://www.domain.com/company/article#123456 => http://www.domain.com/company/article/123456 http://www.domain.com/company/events#October => http://www.domain.com/company/events/October

所以,/company/中的所有网页都会重写# => /

$(window).on('hashchange', function() {
  //
}

3 个答案:

答案 0 :(得分:1)

如果您将网络浏览器导航到http://www.domain.com/company/events#October,它将从服务器获取网址http://www.domain.com/company/events。服务器看不到URL的其余部分,也无法对其执行任何操作。只有Javascript才能对其采取行动。

答案 1 :(得分:1)

通常,所有浏览器都会将请求中的片段部分(#)排除在服务器之外。如果你真的想要这样做,你必须在调用服务器之前重写URL

function addHashtag2Pathname(url){
    var a = document.createElement('a');
    a.href = url;
    if (a.pathname.substr(-1) != "/")
        a.pathname = a.pathname + '/';
    a.pathname += a.hash.replace(/^#/,'');
    a.hash = '';
    return a.href.replace(/#$/,'');
}

您可以在此处查看此功能 http://jsfiddle.net/bknE4/43/

其实我下面没试过,但它应该有用......

$(window).on('hashchange', function() {
   var newurl = addHashtag2Pathname(location.href);
   location.href = newurl;
})

答案 2 :(得分:1)

$(window).on('hashchange', function() {
  var a_tags = document.getElementsByTagName('a');
  for (var i = 0; i < a_tags.length; i = i + 1) {
    var elem = a_tags[i];
    if (/company.*#/.test(elem.href)){
      elem.href = elem.href.replace('#', '/');
    }
  }
}

您可能希望将if条件中的正则表达式更改为更具体。 替换功能也是如此。

但是,如果它应该是永久性的,我会更改HTML服务器端。