【问题标题】:How to rewrite url without # hash如何在没有#hash的情况下重写url
【发布时间】:2015-07-23 09:40:33
【问题描述】:

我有一个这样的锚链接:

<a href="test.php#someElement">Go to element</a>

我想重写最终的 url:如果我点击外部域中的链接(例如来自 google 搜索结果),我想将 not 重定向到

example.com/test.php#someElement

但要

example.com/someElement.html(如新页面)

是否可以使用 htacces 或 jquery?

【问题讨论】:

  • 什么意思?是否要使用 jQuery 更改 &lt;a&gt; 元素的 href?
  • 您想在客户端还是服务器上执行此操作? (提示:# 之后的片段永远不会发送到服务器)
  • 不,我不会更改 href 目标。我希望当我单击链接时,我不会重定向到 example.com/test.php#someElement 之类的 url,而是重定向到 example.com/someElement.html 之类的 url(就像一个新页面)。我认为是服务器端,但我不确定,如果我单击外部域中的链接,我希望重定向到正确的 url,这一点很重要
  • 正如 RowlandShaw 已经说过的那样,片段标识符不会传递给服务器,因此您不能在服务器端执行此操作。唯一的方法是在客户端 JavaScript 中执行此操作 - 作为一个单独的方法,这可能没问题,但这不是最佳的,并且可能对 SEO 没有帮助,如果这是一个问题。
  • 非常感谢,是的,我知道,锚没有被服务器处理。是的问题是SEO,唯一的问题是SEO。你有解决办法吗?

标签: jquery apache .htaccess rewrite


【解决方案1】:

首先为您想要这些行为的每个链接添加一个 class="hashLink"。

<a href="test.php#someElement" class="hashLink">Go to element</a>

并添加了这个脚本

$('a.hashLink').on('click', function(e){

    e.preventDefault();
    var getUrlAfterHash = $(this).attr('href').split('#')[1];
    var newURL = getUrlAfterHash +'.html';
    window.history.pushState("", "", newURL);

    var idPosition = $('#' + getUrlAfterHash).offset();
    $('html, body').animate({scrollTop: idPosition.top}, 800);

});

【讨论】:

  • 是正确的,你重定向正确,谢谢。但是那我怎么才能在#someElement中直接查看这个页面呢?
  • 所以你的要求是,你有带有哈希的锚标签和点击锚标签你想改变你问题中提到的 URL,但是页面不应该重新加载或刷新,然后页面应该滚动到该 ID 的内容区域。如果这是您的要求,那么我已经更新了上面的代码。但它只适用于您的本地主机服务器(它应该有 http:// 或 https://)。如果这不是要求,请告诉我。
  • 是的,这是正确的!操作必须就是这样。如果链接是外部的还是内部的,这并不重要,当然如果链接是外部页面不滚动,但我认为我可以使用 $ ('a.hashLink') 之类的函数来解决。触发器('点击');
猜你喜欢
  • 2014-07-20
  • 2011-06-14
  • 2011-09-28
  • 2012-08-28
  • 1970-01-01
  • 2011-01-04
  • 2020-11-05
  • 1970-01-01
  • 2018-10-24
相关资源
最近更新 更多