如何使用mod_rewrite / htaccess从锚点检测和重定向URL?

时间:2010-08-04 18:36:22

标签: apache .htaccess mod-rewrite anchor swfaddress

我已经看到了许多相反的例子,但我希望从一个锚点/哈希网址转到非锚点网址,如下所示:

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)都看不到它。

任何想法,过去的经验或成功?

4 个答案:

答案 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;
}

就我而言,我需要将碎片链接构建到单个页面中,这是改善网站搜索引擎优化的常用工具的一部分。