2017-09-01 80 views
0

前言:如何在PHP中將頁面重定向到沒有散列(#)的URL?

我在以下地址:

http://www.example.com/#contact 

成功聯絡表格提交後,用戶會被重定向到以下地址:

http://www.example.com/thanks 

隨着下面的代碼幫助:

// Redirect to thank you page 
redirect_to("thanks"); 

功能redirect_to的()定義爲:

// Page redirection 
function redirect_to($url) 
{ 
    if(isset($url) && $url != '') 
    { 
     header("Location: " . $url); 
     exit(); 
    } 
} 

的感謝頁面htaccess的規則是:

# Thanks Page 
RewriteRule ^thanks/?$ thanks.php [QSA,L] 
#RewriteRule ^thanks/$ thanks.php [QSA,L] 

問題:

的問題是哈希(#)字符即片段部分仍然堅持URL:

http://www.example.com/thanks#contact 

如果我將頁面重定向到thanks,那麼#contact部分如何與主URL保持一致?

我們如何通過htaccess或PHP甚至通過JS排除/放棄它?

+0

您的解決方案在firefox中不起作用。 – user5307298

回答

1

之前詢問過此問題。

redirect is keeping hash

標記爲答案的反應是:

簡單的回答「我怎麼阻止它」是指定在Location頭一個空的哈希:

header('Location: /account.html#');

但是,這種行爲並不能保證全面。它似乎可以在我的快速測試中用於WebKit和IE9。儘管如此,你已經無意中發現了HTTP規範中的黑洞。

+0

首先,沒有人像我那樣清楚地問過它。不是嗎?其次,你提到的解決方案是不可接受的,因爲我嘗試了它,它根本不起作用。它在URL的末尾添加了不必要的#。這有任何意義嗎? – user5307298

+0

在我看來,這只是一種解決方法,不是一個好的解決方案。但這是我找到的解決方案,至少在2013年,他們聲稱這是「HTTP規範中的黑洞」。可能你必須忍受它,除非有人有更優雅的解決方案 – Tore

+0

實際上,在這裏嘗試解決方案,其中一個可能有所幫助:https://stackoverflow.com/questions/16773111/removing-anchor-hash- from-url – Tore

相關問題