URL中的哈希字符(在Apache中访问和重定向)

时间:2012-02-28 15:35:00

标签: apache .htaccess url redirect hash

看起来这个问题已被其他人部分提出,但我无法找到我正在寻找的答案,所以我想我会提出我的特殊情况以防有人能够提供帮助

我们有一个旧网站(由第三方外部开发),该网站将被淘汰并由内部设计的新网站取代。由于他们自己最熟悉的原因,旧站点的开发人员使用哈希字符作为旧站点URL的一部分(www.mysite.com/#/my-content-stuff)。为了帮助过渡和帮助SEO,我需要为旧网站上表现最佳的网址设置301重定向。然而,正如我现在发现的那样,我无法在.htaccess文件中设置简单的重定向,因为我认为它将哈希字符作为注释并忽略该行的其余部分。我尝试过转义字符,使用%23代替,通配符匹配,似乎没什么用。

作为一种解决方法,我想知道简单地创建具有与旧站点相同的路径和URL的虚拟文件,然后简单地在其中创建HTML重定向以将流量驱动到正确的新页面,但看起来好像服务器是关于URL中的哈希字符执行类似的操作,并忽略任何后续操作。因此,如果我在我的新闻服务器上创建一个名为“#”的子文件夹并在其中创建一个名为“test.html”的文件,我希望能够访问“www.myNEWsite.com/#/test”。 html',但它只是带我到我网站的默认根文件。

任何人都可以了解我如何解决这个问题吗?我必须承认,我不是那么克服Apache,所以我必须学习很多东西。

非常感谢任何人提供的任何指示或信息。

干杯,

2 个答案:

答案 0 :(得分:1)

URL中的哈希字符指定了锚点,它甚至没有发送到您的网络服务器。服务器端无法进行重定向,旧开发人员可能使用JavaScript进行重定向。实现不使用哈希的后备URL,并使用全局JavaScript脚本检测这些URL并自动重定向。

答案 1 :(得分:0)

服务器无法读取哈希标记。它们被视为文档中的位置,因此不会暴露给服务器。客户是唯一看到这些的客户。您可以做的最好是使用“元刷新”标记,或者,您可以使用javascript来检测网址,如果需要301重定向,请使用“window.location”将用户移动到完整的网址mod_rewrite或php页面可以发出301标题。

然而,对于通过外部网站点击旧链接的用户来说,它们都不是SEO友好的,只能真正解决问题

<!-- Put in head tag so the page does not wait to load the content-->
<script type="text/javascript">

if(window.location.hash != "") { 

var h = window.location.hash.match(/#\/?(.*)/i)[1];
switch(h) {
    case "something_old":
        window.location = "/something_new.html";
    break;
    case "something_also_old":
        window.location = "/something_also_new.html";       
    break;  
}

}

</script>