如何在一个目录下将所有哈希标记重写为斜杠标记? (阿帕奇)
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() {
//
}
答案 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服务器端。