2012-12-18 73 views
2

下午,htaccess以及散列隱藏

是否有可能把在htacces重定向像http://example.com/portfolio規則以http://example.com/index.php#portfolio,而不是在瀏覽器的URL字段中顯示這最後的地址?

我知道竟沒有得到發送到服務器,但必須有某種方式來掩蓋這些醜陋的網址..

可能有關的問題或沒有,但我有以下jQuery代碼

if(history.pushState){ 
    history.pushState(null,null,'#'+$(this).attr('class')); 
}else{ 
    location.hash = '#'+$(this).attr('class');} 
} 

if(window.location.hash){ 
    var hash = window.location.hash.substring(1); 
    if(jQuery.browser.webkit){ 
     $('html,body').animate({scrollTop:$('#'+hash).offset().top-2*88},'slow'); 
    }else{ 
     $('html,body').animate({scrollTop: $('#'+hash).offset().top-3*88-10},'slow');} 
    } 
} 

在此先感謝您提供任何解決方案。

回答

2

我知道竟沒有得到發送到服務器,但必須有某種方式來掩蓋這些醜陋的網址..

沒有。通過「從瀏覽器屏蔽它」,這意味着瀏覽器不知道它請求的URL已經在服務器端被損壞了。它認爲它已經請求了http://example.com/portfolio,這就是它在地址欄中顯示的內容。

如果你想隱藏#portfolio片段從瀏覽器,然後片段變得完全無用。瀏覽器是客戶端和服務器之間唯一可以從這樣的片段中獲得任何用處的實體,因爲服務器隱藏它而沒有看到它。對片段沒有任何用處的服務器將其從瀏覽器中隱藏起來。您無法使瀏覽器加載與地址欄上顯示的網址不同的網址,而無需某種框架(隱藏網址)或某種JavaScript欺騙手段來更改地址欄中的內容。

如果服務器在內部重寫/portfolio/index.php#portfolio,則會立即丟棄該片段。 index.php的執行並不知道它存在,因爲只有瀏覽器關心片段。

如果您不想在您的網址中使用片段,那麼您應該修改內容的傳送方式。

+0

我懷疑......但是有可能將#從散列中取出並考慮第一個斜線後的所有內容散列? –

+0

@AfonsoGomes這取決於瀏覽器側面的腳本。我對jQuery瞭解不多,但可以嘗試更改上面的代碼以檢查第一個斜槓後面的所有內容。碎片是在頁面上同時運行的不同腳本彼此進行通信,因此它可能會破壞頁面上的其他內容。 –