2010-08-04 30 views
4

我已經看到了一些相反的例子,但我正在尋找從錨點/哈希URL去一個非錨URL,像這樣:如何使用mod_rewrite/htaccess從URL中檢測並重定向?

From: http://old.swfaddress-site.com/#/page/name 
To: http://new.html-site.com/page/name 

http://karoshiethos.com/2008/07/25/handling-urlencoded-swfaddress-links-with-mod_rewrite/的例子無爲我運作。這聽起來像REQUEST_URI其中有/#/stuff,但我和我的Apache(2.0.54)都沒有看到它。

任何想法,過去的經驗或成功?

+0

該頁面正在討論如何解決Apple產品中錯誤編碼'#'的錯誤,以致意外傳遞給服務器。正如Wrikken所說,這種情況不會發生,因此您無法閱讀該片段。 – bobince 2010-08-04 20:54:16

回答

12

#後面的任何內容都是一個片段,並且將而不是發送到網絡服務器。你無法在任何地方捕捉它,你必須使用客戶端方法來捕捉它們。

1

我是您鏈接到的帖子的作者。 Wrikken是正確的,指定錨點後面的內容不會發送到服務器,除非在整個過程中一些URL已經被破壞。在客戶端,你需要一些JavaScript這樣在您的着陸頁的鏈接swfaddress重定向到另一個域相應的URL:

var re = new RegExp('#(.*)'); 
var redirectFragment = re.exec(document.location.toString()); 
if (redirectFragment!=null) 
{ 
    document.location = 'http://new.html-site.com'+redirectFragment[1]; 
} 
2

@RobRuchte:豈不是更好地使用window.location.hash,以取代代替正則表達式?

var redirectFragment = window.location.hash.replace(/^#/,''); 
if ('' !== redirectFragment) { 
    window.location = 'http://new.html-site.com' + redirectFragment; 
} 
0

我使用@ m14t的答案的修改版本。這適用於重定向,看起來像http://example.com/path/to/page#fragment- >http://example.com/path/to/page/片段。請注意,我還連接了window.location.pathname進行重定向,否則我無法獲得重定向的完整路徑。如果新文件路徑與舊文件路徑完全不同,那麼這將不起作用。

var redirectFragment = window.location.hash.replace(/#/,'/'); 
if ('' !== redirectFragment) { 
    window.location = 'http://example.com' + window.location.pathname + redirectFragment; 
} 

就我而言,我需要建立零散鏈接到單獨的頁面,這是一個什麼樣的通常做法,以提高網站的搜索引擎優化的一部分。