我在這裏有一個相當困難,並希望來自社區的一些建議。這是我的問題:PHP中處理URL中的片段標識符
我創建了一個網站,其中包含大量的動態內容,所有內容都通過AJAX提取並通過JS顯示。我目前允許直接鏈接到我的內容的方式是通過與JS動態修改片段標識符,這裏有一個例子:
http://www.mysite.com/home#/123
其中123是內容的ID。當內容關閉時,它會再次剝離碎片標識符。
這很好用,當人們加載頁面時,我的AJAX請求正在成功請求'123'文章。但是我剛剛在所有文章上實現了Facebook按鈕,現在我碰到了一堵磚牆。
基本上,Facebook找到與您喜歡的內容相關聯的縮略圖和標題以及URL的方式是檢查傳遞到fb中的URL的元標記,如iframe。它通過在URL上執行GET請求來執行此操作,檢查元標記的內容,然後在Facebook上顯示這些內容。
問題是片段標識符沒有傳遞到服務器,所以我沒有辦法在PHP(我知道)動態生成這些元標記與特定請求的文章的內容。
例如,我希望能夠做這樣的事情:
$id_vals = get_id_values($hash_fragment);
echo '<meta property="og:title" content="'.$id_vals['title'].'" />';
你首先想到的可能是:爲什麼不使用GET請求或查詢字符串?即:
http://www.mysite.com/home?id=123
然而這種方法的問題是,JavaScript不能動態地改變URL的這一部分,它只能改變片段標識符。這意味着我們的文章的所有直接鏈接將需要頁面刷新。這違背了我們整個「動態」的方法 - 我可能會添加的是非常好的:)
所以我現在很難過。我能想到的唯一的半解決方案是使用以下兩種方法:
在fb like請求中使用get參數,對於直接鏈接使用片段標識符。
但這帶來了下列問題:
- 如果直接鏈路從用戶粘貼在Facebook上它將包括片段標識符,並且正確的元數據將不會在Facebook上顯示。
- 我需要做一些奇怪的重定向魔術來修復URL的格式以刪除ID(即檢測GET參數是否傳入並重定向到片段標識符等效項)。但我不知道FB是否也會遵循重定向並從重定向頁面而不是第一頁獲取meta標籤,這無疑會使該解決方案無用。
對不起,對文本的牆!欣賞您可以提供的任何輸入。
編輯:我剛剛測試了我提出的解決方案,涉及到兩者的結合,我可以確認Facebook遵循重定向,所以此解決方案根本不起作用。這令人沮喪!
編輯編輯:實現我的「混合」的想法一種可能的方式是使用了window.location重定向,而不是PHP header()函數調用的重定向,所以Facebook的從原來的頁面抓取meta標籤,對於那些你有類似的問題。
謝謝。
爲什麼Javascript不能更改URL的GET參數? –
我希望所有在SO上的新海報都能顯示您所顯示的努力量和研究量...... – jprofitt
Cheers jprofitt! Scott:GET參數不能被JavaScript修改而不會導致重定向。 Window.location以不同方式處理片段標識符和查詢字符串。 – scrapii