【问题标题】:Hash character in URLs (accessing and redirecting in Apache)URL 中的哈希字符(在 Apache 中访问和重定向)
【发布时间】:2012-03-18 02:19:13
【问题描述】:

似乎其他人已经部分提出了这个问题,但我找不到我正在寻找的具体答案,所以我想我会提出我的特殊情况,以防有人能够提供帮助.

我们有一个旧网站(由第三方在外部开发)即将停用并由内部设计的新网站取代。由于众所周知的原因,旧站点的开发人员使用哈希字符作为旧站点 URL 的一部分 (www.mysite.com/#/my-content-stuff)。为了协助过渡并帮助 SEO,我需要为旧站点中表现最好的 URL 设置 301 重定向。然而,正如我现在发现的那样,我无法在 .htaccess 文件中设置简单的重定向,因为我相信它将哈希字符作为注释并忽略该行的其余部分。我尝试了转义字符,改用 %23,通配符匹配,似乎没有任何效果。

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

请任何人解释我如何解决这个问题?我必须承认我对 Apache 不太了解,所以我必须在学习过程中学到很多东西。

非常感谢任何人都可以提供的任何指针或信息。

干杯,

丰富

【问题讨论】:

标签: apache .htaccess url redirect hash


【解决方案1】:

URL 中的哈希字符指定锚点,它甚至不会发送到您的网络服务器。在服务器端重定向是不可能的,老开发者可能使用 JavaScript 做到了。改为实现不带哈希的后备 URL,并让全局 JavaScript 脚本检测这些 URL 并自动重定向。

【讨论】:

  • 您好 Minitech,谢谢。如何设置全局 javascript 来处理传入请求和重定向等?抱歉,我对 Apache 还不是很熟悉,所以目前我不知道我能用它做什么。非常感谢,丰富
  • @RichardBurnley:你是说自动?几乎不可能做到这一点。只需在每个页面上包含脚本,将其命名为 default.js 或类似名称。它使您能够更轻松地更改任何页面的行为。
  • 嗨 Minitech,我只需要设置大约 18 个关键 URL 来设置重定向,所以如果我需要插入脚本调用也不错。不过,我仍然不确定该怎么做,因为传入的请求将针对 Apache 平台上不存在的 URL,例如 www.yorkshiretea/#/what_we_care_about,在新站点上实际上需要重定向到 www.yorkshiretea.co.uk/about-us/yorkshire-respecting-the-planet.php。我需要在我的新站点上创建什么来拦截进入该 URL 的任何请求,然后根据需要重定向?干杯,丰富
  • @RichardBurnley:嗯……如果你的 URL 没有某种固定的翻译,那么你就不能自动化它。对不起!
【解决方案2】:

服务器无法读取哈希标签。它们被视为文档中的位置,因此不会暴露给服务器。客户是唯一看到这些的人。您可以做的最好的事情是使用“元刷新”标签,或者,您可以使用 javascript 来检测 url,如果它需要 301 重定向,请使用“window.location”将用户移动到完整的 url,其中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>

【讨论】:

  • 嗨,李,感谢您的建议。目前,老实说,我只能满足于重定向从旧链接到达的访问者。我该如何实施您关于使用 javascript 拦截传入请求并酌情重定向的建议?我对 Apache 还不是很熟悉,所以我还不知道我能用它做什么。非常感谢,Rich。
  • 嗨 Rich,是否有一个共同的结构,例如所有旧链接都是“www.website.com/index#pagename”,它们需要重定向到“www.website.com/pagename”或每个旧链接彼此完全不同吗?您能否提供 from=>to 链接的真实示例(如果您需要匿名,请将域替换为 website.com)
  • 嗨,Lee,很遗憾,新网站是完全重新设计的,所以没有像这样干净的映射。举个例子,在旧网站上,页面可能是 www.yorkshiretea.co.uk/#/what_we_care_about,而在新网站上,现在需要重定向到 www.yorkshiretea.co.uk/about-us/yorkshire -tea-respecting-the-planet.php 如您所见,旧 URL 和新 URL 之间没有太大的相关性。我们要重定向的旧站点中只有少数几个关键 URL(大约 18 个左右),因此如果有解决方法,请不要介意对每个关键 URL 进行一些手动干预。干杯,丰富
  • 嗨,Richard,在这种情况下,您可以使用纯 JavaScript 或将所有哈希标签 URL 重定向到 php 脚本并在后台处理重定向。我将在几分钟内提供上面纯 javascript 解决方案的示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多