我已经看到了许多相反的例子,但我希望从一个锚点/哈希网址转到非锚点网址,如下所示:
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 :(得分:12)
#
之后的任何内容都是片段,并且不会被发送到网络服务器。你无法在那里捕获它,你必须使用客户端方法来捕获它们。
答案 1 :(得分:2)
@RobRuchte:使用window.location.hash并使用替换而不是正则表达式会不会更好?
var redirectFragment = window.location.hash.replace(/^#/,'');
if ( '' !== redirectFragment ) {
window.location = 'http://new.html-site.com' + redirectFragment;
}
答案 2 :(得分:1)
我是您关联的帖子的作者。 Wrikken是正确的,命名锚点之后的内容不会发送到服务器,除非有什么东西在整个过程中损坏了URL。在客户端,您需要在着陆页中使用这样的JavaScript来将swfaddress链接重定向到另一个域上的相应网址:
var re = new RegExp('#(.*)');
var redirectFragment = re.exec(document.location.toString());
if (redirectFragment!=null)
{
document.location = 'http://new.html-site.com'+redirectFragment[1];
}
答案 3 :(得分: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;
}
就我而言,我需要将碎片链接构建到单个页面中,这是改善网站搜索引擎优化的常用工具的一部分。