2013-11-20 63 views
2

如何重寫所有哈希標記以斜槓標記在一個目錄下? (阿帕奇)apache重寫所有哈希標記以在一個目錄下斜槓標記

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

好像你需要轉換HTML,因爲一旦你發出一個帶有散列標記的超鏈接,客戶端不會將它發送回服務器。你嘗試過mod_proxy_html嗎?當你用斜槓接收它們時,你當然需要做好準備來處理這些URL。 – covener

回答

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; 
}) 
1

如果您在瀏覽網頁瀏覽器http://www.domain.com/company/events#October,它會從服務器獲取的URL http://www.domain.com/company/events。服務器沒有看到URL的其餘部分,並且無法執行任何操作。只有Javascript可以採取行動。

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('#', '/'); 
    } 
    } 
} 

你可能想改變正則表達式中,如果條件更加具體。 替換功能相同。

但是如果它應該是永久性的,我會改變HTML服務器端。

相關問題